素数筛1
1.朴素for(int i=1; i*i <= n; i++) if(n % i == 0) return 0; return 1
2.埃氏筛 筛掉大部分数的倍数,从x*x开始
点击查看代码
void prime(int n)
{
memset(v,0,sizeof(v));
for(int i=2; i<=n; i++)
{
if(v[i])是素数;
for(int j=1; j<=n/i; j++) v[ i*j ] = 1;
}
}
点击查看代码
void prime(int n)
{
memset(v,o,sizeof(v));//最小质因子
int m=0;//质因子数量
for(int i=2;i<=n;i++)
{
if(v[i]==0)
{
//是素数
prime[++m]=i;
v[i]=i;
}
for(int j=1;j<=m;j++)
{
//i有比prime更小的质因子,或大于n
if(prine[j]>v[i] ||prime[j]>n/i)
break;//prime[j]是合数i*prime[j]的最小质因子
v[i*prime[j]]=prime[j];
}
}
}