• 【洛谷 3383】线性筛素数


    题目描述

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

    输入格式

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

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

    输出格式

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

    输入输出样例

    输入 #1
    100 5
    2
    3
    4
    91
    97
    输出 #1
    Yes
    Yes
    No
    No
    Yes

    说明/提示

    时空限制:500ms 128M

    数据规模:

    对于30%的数据:N<=10000,M<=10000

    对于100%的数据:N<=10000000,M<=100000

    样例说明:

    N=100,说明接下来的询问数均不大于100且不小于1。

    所以2、3、97为质数,4、91非质数。

    故依次输出Yes、Yes、No、No、Yes。

    题解:hhh开心的爱诗筛法。

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    #include<bits/stdc++.h>
    using namespace std;
    const int N=10000002;
    int prime[N],n,m,x;
    int num=0;
    void work()  
    {  
        int i, j;  
        for(int i=2;i<=n;i++)
            prime[i]=1;
        prime[0] = prime[1] = 0;  
        for (i=2; i<n; i++)  
        {  
            if (!prime[i]) continue;  
            for (j=i*2; j<=n; j+=i) prime[ j ] = 0;  
        }  
    }
    int main(){
        freopen("3383].in","r",stdin);
        freopen("3383].out","w",stdout);
        scanf("%d %d",&n,&m);
        work();
        for(int i=1;i<=m;i++){
            scanf("%d",&x);
            if(prime[x]==1) puts("Yes");
            else puts("No");
        }
        return 0;
    }
  • 相关阅读:
    【Codeforces 349B】Color the Fence
    【Codeforces 459D】Pashmak and Parmida's problem
    【Codeforces 467C】George and Job
    【Codeforces 161D】Distance in Tree
    【Codeforces 522A】Reposts
    【Codeforces 225C】Barcode
    【Codeforces 446A】DZY Loves Sequences
    【Codeforces 429B】Working out
    【Codeforces 478C】Table Decorations
    【Codeforces 478C】Table Decorations
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11855486.html
Copyright © 2020-2023  润新知