线性筛素数,简称欧拉筛素数,可以在埃氏筛的基础上完爆埃氏筛
1 #include<cstdio> 2 int f[10000005]; 3 int prime[10000005]; 4 using namespace std; 5 int main(){ 6 int n,m; 7 scanf("%d%d",&n,&m); 8 int tot=1; 9 f[1]=1; 10 for(int i=2;i<=n;i++){ 11 if(f[i]==0){ 12 prime[tot]=i; 13 tot++; 14 } 15 for(int j=1;j<=n;j++){ 16 17 if(i*prime[j]>n){ 18 break; 19 } 20 21 f[i*prime[j]]=1; 22 23 if(i%prime[j]==0){ 24 break; 25 } 26 } 27 } 28 for(int i=1;i<=m;i++){ 29 int w; 30 scanf("%d",&w); 31 if(f[w]==1){ 32 printf("No "); 33 }else{ 34 printf("Yes "); 35 } 36 } 37 return 0; 38 }