洛谷3383 线性筛素数

题目描述

如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式:

第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。

接下来M行每行包含一个不小于1且不大于N的整数,即询问概数是否为质数。

输出格式:

输出包含M行,每行为Yes或No,即依次为每一个询问的结果。

线性筛素数模板题。

#include
#include
#include
using namespace std;
#define LL long long
bool have[10000010];
int prm[1000010],n,m;
int main()
{
    int i,j,k,p,q,x,y,z,tot=0;
    scanf("%d%d",&n,&m);
    for (i=2;i<=n;i++)
    {
        if (!have[i]) prm[++tot]=i;
        for (j=1;j<=tot&&(LL)i*prm[j]<=n;j++)
        {
            have[i*prm[j]]=1;
            if (i%prm[j]==0) break;
        }
    }
    have[1]=1;
    while (m--)
    {
        scanf("%d",&x);
        if (have[x]) printf("No\n");
        else printf("Yes\n");
    }
}

你可能感兴趣的:(数学,洛谷)