int n;//n:需要求的筛选出<=n的所有素数
int cnt;//cnt为筛选出的素数个数
bool isPrime[MAXN];//MAXN是1~N
int pan[MAXN];//pan记录素数
void ueler(int n)
{
memset(isPrime,true,sizeof(isPrime));//先初始1~N全是素数
isPrime[1]=false;//1不是素数
for(int i=2;i<=n;i++)
{
if(isPrime[i])
{
pan[cnt++]=isPrime[i];//如果i没有被前面的素数筛选掉,那么i是素数,将它记录在pan中
}
for(int j=1;j<=cnt&&i*isPrime[j]<=n;j++)
//j循环出i前面的素数
//筛掉i的素数倍,即i*pan[j],将其记为不是素数即false
{
isPrime[i*pan[j]]=false;//i*它前面的素数所得都是合数
if(i%pan[j]==0)
{
break;
}
}
}
}
欧拉筛法代码
最新推荐文章于 2024-08-12 11:55:07 发布