poj 2689——Prime Distance
2014-06-19 18:57
344 查看
题意:给出L和U,求L到U之间距离最小的素数和距离最大的素数
思路:因为L和U小于2147483647,用筛法的时候只需要筛到根号下n即可,而50000的平方大于L和U的最大值,所以找出50000以内的所有素数,用这些素数对L与U内的数进行筛选即可。
错误:第一次用了int,在循环的时候由于50000的平方超过了int的范围,导致死循环。第二次脑残的在算L和U之间素数距离的最大最小值的时候多加了一个判断,完全是马虎的错误。
代码如下:
思路:因为L和U小于2147483647,用筛法的时候只需要筛到根号下n即可,而50000的平方大于L和U的最大值,所以找出50000以内的所有素数,用这些素数对L与U内的数进行筛选即可。
错误:第一次用了int,在循环的时候由于50000的平方超过了int的范围,导致死循环。第二次脑残的在算L和U之间素数距离的最大最小值的时候多加了一个判断,完全是马虎的错误。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; const int maxn=50001; bool isprime[maxn*20]; ll prime[maxn]; int tot=0; void get_prime() { memset(isprime,1,sizeof(isprime)); isprime[1]=0; for(ll i=2;i<maxn;++i){ if(isprime[i]) { prime[tot++]=i; for(ll j=i*i;j<maxn;j=j+i){ isprime[j]=0; } } } } void makeluprime(int l,int u){ memset(isprime,1,sizeof(isprime)); for(ll i=0;i<tot;++i){ ll b=l/prime[i]; while(b*prime[i]<l||b<=1)b++; for(ll j=b*prime[i];j<=u;j+=prime[i]){ if(j>=l) isprime[j-l]=0; } } if(l==1)isprime[0]=0; } int luprime[1000005]; int main() { // freopen("data.txt","r",stdin); get_prime(); ll l,u; while(scanf("%lld%lld",&l,&u)!=EOF) { makeluprime(l,u); ll maxd=0;ll mind=u-l+1; ll sum=0; for(int i=0;i<=u-l;++i){ if(isprime[i]){luprime[sum++]=l+i;} } if(sum<=1){printf("There are no adjacent primes.\n");continue;} ll x1,x2,n1,n2; for(int i=0;i<sum-1;++i){ ll now=luprime[i+1]-luprime[i]; if(now>maxd){ maxd=now; x1=luprime[i]; x2=luprime[i+1]; } if(now<mind){ mind=now; n1=luprime[i]; n2=luprime[i+1]; } } printf("%lld,%lld are closest, %lld,%lld are most distant.\n",n1,n2,x1,x2); } return 0; }
相关文章推荐
- poj 2689 Prime Distance
- Poj 2689 Prime Distance(素数筛+二次素数筛)
- !POJ 2689 Prime Distance-卡时间-(素数筛法)
- 【筛选法】 POJ 2689 Prime Distance
- poj 2689 Prime Distance 筛法+区间筛素数
- poj 2689 Prime Distance 【数论】【筛法求素数】
- poj 2689 Prime Distance(筛一个区间内的素数(或合数))
- POJ 2689 Prime Distance(筛选两次素数)
- POJ 2689 Prime Distance 素数筛选法应用
- POJ 2689 Prime Distance(大区间素数筛法,两次筛法)
- Prime Distance poj 2689 区间内的素数打表模板
- poj2689 Prime Distance 有难度 埃拉托斯尼斯筛法的运用
- POJ 2689 Prime Distance
- poj -- 2689 Prime Distance(筛选法求素数)
- POJ 2689 Prime Distance
- POJ 2689 Prime Distance(筛法求素数)
- POJ-2689-Prime Distance
- POJ 2689/ ZOJ 1842: Prime Distance[两次筛法/筛选法平移]
- poj2689 Prime Distance
- POJ 2689 Prime Distance(素数筛选)