标签:
判断一个素数是否为素数:
1:2-n-1。。。for暴力判断;
2:sqrt(n) 判断;
3:一个我也不知道为什么的代码,总之蛮快的
int prime(int n) { if(n<=1) return 0; if(n==2) return 1; if(n%2==0) return 0; int k, upperBound=n/2; for(k=3; k<=upperBound; k+=2) { upperBound=n/k; if(n%k==0) return 0; } return 1; }
4:判断一个大素数的米勒拉宾素数测试
复杂度:O(k*log(n))k是测试的次数
素数打表:
1 埃拉特斯特尼筛法复杂度O(n loglog(n));
for(i=0;i<MAX;i++) a[i]=1; a[0]=0; a[1]=0; for(i=2;i*i<MAX;i++){ for(j=i+i;j<MAX;j+=i) a[j]=0;
2 欧拉筛法 复杂度O(n)
const int MAXN=3000001; int prime[MAXN];//保存素数 bool vis[MAXN];//初始化 void Prime(int n) { int cnt=0; memset(vis,0,sizeof(vis)); for(int i=2;i<n;i++) { if(!vis[i]) prime[cnt++]=i; for(int j=0;j<cnt&&i*prime[j]<n;j++) { vis[i*prime[j]]=1; if(i%prime[j]==0)//关键 break; } } return cnt;//返回小于n的素数的个数 }
标签:
原文地址:http://www.cnblogs.com/jhz033/p/5468008.html