线性筛
for(int i=2;i<=n;++i) { if(!vis[i]) { for(int j=i;j<=n;j+=i) { vis[j]=1; } } }
艾氏筛法
int prime[MAXN],n; void Prime(int n) { int cnt =0; memset(prime,1,sizeof(prime)); prime[0]=prime[1]=0; for(int i = 2; i <= n; i ++) { if(prime[i]) { prime[++cnt] = i; cout <<prime[cnt]<<" "; for(int j = i*i; j <= n; j +=i) { prime[j] = 0; } } } return ; }
欧拉筛法
for(i = 2; i <= n; i++) { if(f[i] == 0) { p[++cnt] = i; } for(j = 1; j <= cnt; j++) { if(i * p[j] > n)break; f[i * p[j]] = 1; if(i % p[j] == 0)break; } }