zoukankan      html  css  js  c++  java
  • 欧拉筛法

    作用:求出[2,N]内所有素数。

    算法:每个合数必有一个素数因子,利用已知素数去筛除合数。

    说明:因为答案数组是从1开始的,所以用binary_search( ) 、lower_bound( )和upper_bound( ) 函数不需要另行判断,但注意写法要均加1  ---------------(Ans_p+1,Ans_p+tot+1,x) 。

    代码

     时间复杂度:近似O(n)

    输入:n    所需素数范围

    输出:函数内部赋值于Ans_p数组

    #include<iostream>
    #include<cstdio>
    #include<string.h>
    using namespace std;
    
    const int MaxN=1000010;//设置最大范围
    bool flag[MaxN];//标记数组
    int Ans_p[MaxN],tot;//素数表,总素数个数,注意(Ans_p[tot])内有素数
    
    void eulgp(int n)//2~n 内的素数
    {
        tot=0;                         //初始化
        memset(flag,-1,sizeof(flag));
    
        for(int i=2;i<=n;++i)
        {
            if(flag[i])
                Ans_p[++tot]=i;         //存入素数
            for(int j=1;(j<=tot)&&(i*Ans_p[j]<=n);++j)
            {
                flag[i*Ans_p[j]]=0;
                if(i%Ans_p[j]==0)       //避免重复赋0及时跳出
                     break;
            }
        }
    }
    
    int main()
    {
        int n,m,x;
        cin>>n>>m;//输入素数范围及需要判断的次数
        eulgp(n);
        while(m--)
        {
            cin>>x;
            if(binary_search(Ans_p+1,Ans_p+tot+1,x))//此为STL二分函数判段有无,
                cout<<"Yes"<<endl;                  //有1,无0
            else
                cout<<"No"<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    Ajax 导出Excel 方式
    配置文件类型
    Ionic 发布Release 版本
    $cordovaNetwork 使用
    Web Api 跨域问题
    Python学习(五)--字典
    Python学习(四)--字符串
    Python学习(三)--列表和元组
    mac下安装HTMLTestRunner
    mac下selenium+python环境搭建
  • 原文地址:https://www.cnblogs.com/l1l1/p/8688253.html
Copyright © 2011-2022 走看看