素数判断(朴素、高效)
2016-08-13 10:31
225 查看
朴素判定(这个比较常用)
高效判定
朴素打表(比较还是觉得这个好)
高效打表
经典例题:http://poj.org/problem?id=2689
bool prime(int x) { for(int i=2;i*i<=x;i++) if(x%i==0) return 0; return x<=1?0:1; }
高效判定
bool prime(int x) { if(x==2||x==3) return 1; if(x%6!=1&&x%6!=5) return 0; for(int i=5;i*i<=x;i+=6) if(x%i==0||x%(i+2)==0) return 0; return x==1?0:1; }
朴素打表(比较还是觉得这个好)
void prime() { memset(p,1,sizeof p); for(int i=2;i<N;i++) if(p[i]) for(int j=i+i;j<N;j+=i) p[j]=0; p[0]=p[1]=0; }
高效打表
void prim() { int x[6]={0,4,0,0,0,2}; for(int i=5;i*i<N;i+=x[i%6]) for(int j=i;i*j<N;j+=x[j%6]) p[i*j]=1; p[1]=1; } bool prime(int x) { if(x==2||x==3) return 1; if(x%6==1||x%6==5) if(p[x]==0) return 1; return 0; }
经典例题:http://poj.org/problem?id=2689
#include<iostream> #include<cmath> #include<cstring> using namespace std; const int N=50000+100; const int inf=0x3f3f3f3f; int r[1000000],a ,b ,z=0; int main() { for(int i=2;i<=N;i++) if(!a[i]) { b[++z]=i; for(int j=i*2;j<=N;j+=i) a[j]=1; } int x,y; while(cin>>x>>y) { memset(r,0,sizeof r); for(int i=1;i<=z;i++) { int s,t; s=(x-1)/b[i]+1; t=y/b[i]; for(int j=s;j<=t;j++) if(j>1) r[j*b[i]-x]=1; } int k=-1,ma=-1,mi=inf,m1,m2; for(int i=0;i<=y-x;i++) if(!r[i]) { if(k!=-1) { int dis=i-k; if(dis>ma) ma=dis,m1=i+x; if(dis<mi) mi=dis,m2=i+x; } if(i+x!=1) k=i; } if(ma<0) cout<<"There are no adjacent primes."<<endl; else cout<<m2-mi<<','<<m2<<" are closest, "<<m1-ma<<','<<m1<<" are most distant."<<endl; } }
相关文章推荐
- 高效判断素数的算法
- 高效素数判断
- 大素数高效算法判断
- python 判断素数以及高效求n以内素数
- 高效判断素数
- 判断素数的高效方法
- 高效判断素数方法
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- 判断n以内的素数(高效算法)
- 高效的nextPrime算法(参考l链接中的高效的素数判断)
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- Python学习-更加高效的判断素数,千万或者更多数量
- 素数的高效判断
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- 高效判断素数方法
- 杭电ACM OJ 1016 Prime Ring Problem 回溯法+ 高效判断素数 快速轻松解决
- 高效判断素数方法
- 判断一个数是否为素数---高效判断法
- LeetCode: 204. Count Primes判断是否为素数的高效方法
- java判断大素数