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

    传送门

    线性筛法

    让每个合数只被它最小的素因数筛到

    从而保证每个数均摊复杂度为O(1)

    总复杂度O(n)

    具体看模板

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    using namespace std;
    const int N=10000007;
    int n,m,pri[N],cnt;//pri存素数
    bool not_pri[N];
    //not_pri判断是否是素数,1代表不是,0代表是
    int main()
    {
        cin>>n>>m;
        not_pri[1]=1;//1不是素数
        for(int i=2;i<=n;i++)
        {
            if(!not_pri[i]) pri[++cnt]=i;//更新素数
            for(int j=1;j<=cnt;j++)
            {
                int t=i*pri[j];
                if(t>n) break;
                not_pri[t]=1;//筛素数
                if(i%pri[j]==0) break;//核心,保证每个数只被它最小的素因数筛到
                //后面所有大于pri[j]的素数*i = pri[j]*k(k>i)
            }
        }
        int a;
        while(m--)
        {
            scanf("%d",&a);
            if(not_pri[a]) printf("No
    ");
            else printf("Yes
    ");
        }
        return 0;
    }
  • 相关阅读:
    -mysql-锁2
    -mysql-锁机制分为表级锁和行级锁
    JDBC

    JDBC接口介绍之Statement
    JDBC
    -Java-泛型
    JDBC的介绍和数据库的连接
    2014年9月1日 总结
    MediaRecorder test
  • 原文地址:https://www.cnblogs.com/LLTYYC/p/9640111.html
Copyright © 2011-2022 走看看