zoukankan      html  css  js  c++  java
  • 素数线性筛学习

    以前判断素数都是用O(sqrt(n))的方法来做,当数字很大的时候用时会很高,所以这里用到了另一种方法,线性筛。顾名思义,筛掉一部分数。

    普通做法:当找到一个素数之后,任何一个数乘上这个数字都是合数,筛掉所有的合数就行。

    int prime[N];
    int n,m,test,j,ask,cut,i;
    int Noprime[N];
    void isprime()
    {
        cut=1;
        prime[1]=2;//初始化,第一个质数为2
        Noprime[1]=1;//初始化,1为合数
        for(i=2;i<=n;i++){    
            if(Noprime[i]==0){
                prime[cut]=i;//如果是质数,添加到质数表
                cut++;
            }
    
            for(j=1;j<=n && prime[i]<=i && i*prime[j]<=n;j++){//前提限制为p<i,i*p<n
                Noprime[i*prime[j]]=1;//筛合数
                if(i % prime[j]==0)
      {//该最大因子i已枚举完毕
                    break;
                }
            }
    
        }
        for(i=1;i<=m;i++){
            cin>>ask;
    
            if(Noprime[ask]==0){
                cout<<"Yes"<<endl;
            }else{
                cout<<"No"<<endl;
            }
        }
    }
  • 相关阅读:
    pku2351 Colored Sticks
    JSOI2010 满汉全席
    享元模式
    适配器模式
    合成模式
    原型模式
    创建型设计模式
    建造者模式
    装饰模式
    单例模式
  • 原文地址:https://www.cnblogs.com/TheSilverMoon/p/9402193.html
Copyright © 2011-2022 走看看