zoukankan      html  css  js  c++  java
  • Calling Extraterrestrial Intelligence Again POJ 1411

    题目链接:http://poj.org/problem?id=1411

    题目大意:找两个素数p,q满足a/b<=p/q<=1 且p*q<=m,求p*q最大的一组素数对。

    第一次想的是筛素数,然后枚举,后来发现没有超时(汗,这让我们写正解的很GG)。

    正解是先筛素数,然后用mul数组对于两个素数的积存下较小的那个素数。最后从m向下枚举。

    枚举代码:

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxm = 50000;
    int prime[6000], cnt, m, a, b;
    bool flag[maxm+5];
    
    void pre()
    {
    	for(int i=2;i<=50000;i++)if(!flag[i])
    	{prime[++cnt]=i;
    		for(int j=i*i;j<=maxm&&j>0;j+=i)//j可能会溢出
    			flag[j]=1;
    	}
    	return ;
    }
    
    int main()
    {
    	pre();
    	while(scanf("%d%d%d",&m,&a,&b),m|a|b)
    	{
    		int ans1=0,ans2=0;
    		for(int i=1;i<=cnt;i++)
    			for(int j=i;j<=cnt;j++){
    				int p=prime[i],q=prime[j];
    				if(a*q<=b*p&&p*q<=m){
    					if(p*q>ans1*ans2)
    						ans1=p,ans2=q;
    				}
    				else break;
    			}
    		printf("%d %d
    ",ans1,ans2);
    	}
    }

    正解代码:

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxm = 100000;
    int prime[10000], cnt, m, a, b, mul[maxm+5];
    bool flag[maxm+5];
    
    void pre()
    {
    	for(int i=2;i<=maxm;i++)if(!flag[i])
    	{prime[++cnt]=i;
    		for(int j=i*i;j<=maxm&&j>0;j+=i)//j可能会溢出
    			flag[j]=1;
    		for(int j=1;j<=cnt;j++){
    			if(prime[j]*prime[cnt]>maxm) break;
    			mul[prime[j]*prime[cnt]]=prime[j];
    		}
    	}
    }
    
    int main()
    {
    	pre();
    	while(scanf("%d%d%d",&m,&a,&b),m|a|b)
    	{
    		for(int i=m;i>=1;i--){
    			if(!mul[i]) continue;
    			int p=mul[i],q=i/p;
    			if(a*q<=b*p){
    				printf("%d %d
    ",p,q);break;
    			}
    		}
    	}
    }
  • 相关阅读:
    flex 布局
    5个有用的 CSS 布局生成器
    js 函数
    js 类定义的方法(最终)
    js && ||
    css position 盒子模型
    eldatepicker选择时间,限定选择的时间段
    Java基础学习总结——Java对象的序列化和反序列化
    pytorch自定义算子
    网站上视频下载后保存为MP4格式
  • 原文地址:https://www.cnblogs.com/Orz-IE/p/12039518.html
Copyright © 2011-2022 走看看