线性筛素数
题目描述
如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)
输入输出格式
输入格式:
第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。
接下来M行每行包含一个不小于1且不大于N的整数,即询问概数是否为质数。
输出格式:
输出包含M行,每行为Yes或No,即依次为每一个询问的结果。
分析:模板。
代码
#include <cstdio>
#define maxn 10000005
using namespace std;
bool f[maxn];
int n,m,p[maxn],tot;
int main()
{
scanf("%d%d",&n,&m);
f[1]=true;
for (int i=2;i<=n;i++)
{
if (!f[i]) p[++tot]=i;
for (int j=1;j<=tot;j++)
{
if (i*p[j]>n) break;
f[i*p[j]]=true;
if (i%p[j]==0) break;
}
}
for (int i=1;i<=m;i++)
{
int x;
scanf("%d",&x);
if (!f[x]) printf("Yes\n");
else printf("No\n");
}
}