埃氏筛代码
#include<bits/stdc++.h>
using namespace std;
const int n=10000005;
bool l[n];
void mmp()
{
fill(l,l+n,true);
for(int i = 2; i <= n; i++)
{
if(l[i])
{
for(int j = i*2; j <= n; j+=i) //寻找i的倍数
{
l[j]=false;
}
}
}
}
int main()
{
mmp();
l[1]=false;
int n,m;
scanf("%d%d",&n,&m);
int a;
while(m--)
{
scanf("%d",&a);
if(l[a])
printf("Yes\n");
else printf("No\n");
}
return 0;
}
欧氏筛代码
#include<bits/stdc++.h>
using namespace std;
const int a=10000005;
int N,M,A;
int l[a],num=1;
bool m[a];
void mmp(int k)
{
memset(m,true,sizeof(m));
m[1]=false;
for(int i=2;i<=k;i++)
{
if(m[i])
l[num++]=i;
for(int j=1;j<num&&i*l[j]<=k;j++)
{
m[i*l[j]]=false;
if(i%l[j]==0)
break;
}
}
}
int main()
{
scanf("%d%d",&N,&M);
mmp(N);
for(int i=0;i<M;i++)
{
scanf("%d",&A);
if(m[A])
printf("Yes\n");
else
printf("No\n");
}
return 0;
}