zoukankan      html  css  js  c++  java
  • P3383 【模板】线性筛素数

    题目描述

    如题,给定一个范围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。

    // luogu-judger-enable-o2
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define data 10000005
    using namespace std;
    
    int n,m;
    int cnt;
    int temp;
    int prime[data];    //已有的素数 
    int s_prime[data];        //当前数的最小质因数 
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=2;i<=n;i++)
        {
            if(!s_prime[i]) prime[++cnt]=s_prime[i]=i;        //质数的最小质因数是本身 
            for(int j=1;j<=cnt;j++)
            {
                temp=prime[j]*i;
                if(temp>n) break;
                s_prime[temp]=prime[j];        //当前数的最小质因数 
                if(prime[j]==s_prime[i]) break;    //枚举到i的最小质因数时退出 
            }
        }
        for(int i=1;i<=m;i++)
        {
            int a;
            scanf("%d",&a);
            if(s_prime[a]==a) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    洛谷—— P3353 在你窗外闪耀的星星
    洛谷—— P1238 走迷宫
    洛谷—— P1262 间谍网络
    9.8——模拟赛
    洛谷—— P1189 SEARCH
    算法
    May 22nd 2017 Week 21st Monday
    May 21st 2017 Week 21st Sunday
    May 20th 2017 Week 20th Saturday
    May 19th 2017 Week 20th Friday
  • 原文地址:https://www.cnblogs.com/lovewhy/p/8742668.html
Copyright © 2011-2022 走看看