寻找一个正整数n以内的所有质数
参考文档:[算法]浅谈求n范围以内的质数(素数).
1、暴力遍历法
这种方式比较简单粗暴,就是一个一个的去找
2、暴力遍历法升级版
void prime()
{
int N = 10000;
int primes[N],pos=0;
register int i,j;
for(i=2;i<N;i++){
bool Flag=0;
for(j=2;j<=sqrt(n);j++)
if(i%j==0)Flag=1;
if(Flag==0)primes[++pos]=i;
}
}
这个还没看懂
3、埃氏(Eratosthenes)筛法
void prime()
{
int N=10000;
register int i,j;
bool prim[N];
memset(prim,0,sizeof(prim));
prim[1]=1;
for(i=2;i<=sqrt(N);i++)
if(prim[i]==0)
for(j=i+i;j<=N;j+=i)
prim[j]=1;
}
剔除质数的倍数
4、欧拉(Euler)筛选法
void prime()
{
int N=10000;
int prim[N],bz[N],top=0;
memset(bz,0,sizeof(bz));
register int i,j;
for(i=2;i<=N;i++){
if(!bz[i])prim[++top]=i;
for(j=0;j<=top&&i*prim[j]<=N;j++){
bz[i*prim[j]]=1;
if(i%prim[j]==0)break;
}
}
}
在埃氏基础上,让每一个合数(可以被除本身和1外的数整除的数)被其最小质因子筛选一次。