POJ 2689 Prime Distance (经典素数筛选)
来源:互联网 发布:软件系统开发合同 编辑:程序博客网 时间:2024/05/19 02:21
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
POJ 2689 Prime Distance
http://poj.org/problem?id=2689
区间范围很大,2^31左右,不可能筛选出所有素数,时间和空间都不允许。
但是可以发现询问的区间不是很大,相关是在10^6,这就是本题的突破口了。
首先做一次素数筛选,筛选出sqrt(区间上界)的素数,然后用这些,对询问区间进行筛选,空间也只需要10^6。
注意中间会溢出int
#include<iostream>#include<cstring>#include<queue>#include<cstdio>#include<cmath>#include<algorithm>#define N 100005#define inf 1<<30#define MOD 9973#define LL long long#define eps 1e-7#define zero(a) fabs(a)<eps#define equal(a,b) zero(a-b)using namespace std;bool flag[100005];int prime[100005],cnt=0;//先打出sqrt(上界)的素数表void Prime(){for(int i=2;i<=47000;i++){if(flag[i])continue;prime[cnt++]=i;for(int j=2;j*i<=47000;j++)flag[i*j]=true;}}bool isprime[1000005];int a[1000005],c;int main(){int l,r;Prime();while(scanf("%d%d",&l,&r)!=EOF){memset(isprime,true,sizeof(isprime));if(l==1) l=2;//利用之前的素数,进行二次筛选,注意防溢出for(int i=0;i<cnt&&(LL)prime[i]*prime[i]<=r;i++){int s=l/prime[i]+(l%prime[i]>0);if(s==1)s=2;//不能从1开始,不然就把素数给判成合数了for(int j=s;(LL)j*prime[i]<=r;j++)if((LL)j*prime[i]>=l) isprime[j*prime[i]-l]=false;}c=0;for(int i=0;i<=r-l;i++)if(isprime[i])a[c++]=i+l;//少于两个素数if(c<2){puts("There are no adjacent primes.");continue;}int x1=0,x2=0,y1=0,y2=inf;for(int i=1;i<c;i++){if(a[i]-a[i-1]>x2-x1){x1=a[i-1];x2=a[i];}if(a[i]-a[i-1]<y2-y1){y1=a[i-1];y2=a[i];}}printf("%d,%d are closest, %d,%d are most distant.\n",y1,y2,x1,x2);}return 0;}
- POJ 2689 Prime Distance (经典素数筛选)
- POJ 2689 Prime Distance(筛选两次素数)
- Prime Distance - POJ 2689 素数筛选
- POJ 2689 Prime Distance 素数筛选 -
- POJ 2689 Prime Distance (素数+两次筛选)
- POJ 2689 Prime Distance 求素数距离(两次筛选)
- [ACM] 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【素数筛选】 2015/11/13
- poj 2689 Prime Distance(筛素数)
- POJ 2689 Prime Distance(筛法求素数)
- f14
- Android JSON解析
- POJ 3692 最小点覆盖 最大二分图匹配
- Apache Hadoop(Cloudera CDH4)安装需要注意的几点
- f15
- POJ 2689 Prime Distance (经典素数筛选)
- 多线程并发处理
- PKU 3468 A Simple Problem with Integers
- 现实世界的Windows Azure:与iQmetrix的市场营销副总裁Anne Weiler对话
- f16
- android 系统搜索框(有浏览记录)
- 多线程
- Javascript代码优化
- f17