【洛谷 3383】【模板】線性篩素數

問題描述
如題,給定一個範圍N,你需要處理M個某數字是否爲質數的詢問(每個數字均在範圍1-N內)
輸入
第一行包含兩個正整數N、M,分別表示查詢的範圍和查詢的個數。

接下來M行每行包含一個不小於1且不大於N的整數,即詢問該數是否爲質數。
輸出
輸出包含M行,每行爲Yes或No,即依次爲每一個詢問的結果。
樣例輸入
100 5
2
3
4
91
97
樣例輸出
Yes
Yes
No
No
Yes
算法討論
線性篩模板。

#include <cstdio>
#define MAX_N 10000006
using namespace std;

int primes[MAX_N],v[MAX_N],n,m,l;
bool f[MAX_N];

void prime()
{
    for (int i=2;i<=n;i++)
    {
        if (v[i]==0)
        {
            v[i]=i;
            primes[++l]=i;
            f[primes[l]]=1;
        }
        for (int j=1;j<=l;j++)
        {
            if (primes[j]>v[i] || primes[j]>n/i)
                break;
            v[i*primes[j]]=primes[j];
        }
    }
    return;
}

int main()
{
    scanf("%d%d",&n,&m);
    prime();
    for (int i=1;i<=m;i++)
    {
        int x;
        scanf("%d",&x);
        if (f[x])
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章