zoukankan      html  css  js  c++  java
  • 素数筛

    bool isPrime(int x)
    {
        if(n<=1)
            return false;
        for(int i=2;i<=(int)sqrt(x);i++)
        {
            if(x%i==0)
                return false;
        }
        return true;
    }

    对于一个正整数n,如果他存在1和本身以外的因子,一定是在sqrt(n)左右成对出现。

    利用以上函数,对数字直接进行判断,可以获得素数,这是普通的方法

    如果x的范围比较小,i*i不会溢出int的范围,可以使用下面的代码

    bool isPrime(int x)
    {
        if(n<=1)
            return false;
        for(int i=2;i*i<=x;i++)
        {
            if(x%i==0)
                return false;
        }
        return true;
    }

    下面介绍更快的方法

    素数筛法

    2是素数,2的所有倍数就都可以判断为非素数

    如果一个数n不是素数,那么它一定有素因子,所以在判断其素因子的时候就已经将这个数n否决了。

    bool prim[MAXN]={false};//false为素数
    int prime[MAXN]={0};
    void Find_Prime(int n)//n是范围
    {
        for(int i=2;i<n;i++)
        {
            if(prim[i]==false)
            {
    //            for(int j=2;j*i<n;j++)
    //                prime[j]=true;
                for(int j=i+i;j<n;j=j+i)
                    prim[j]=true;
            }
        }
    }
  • 相关阅读:
    关系运算符重载
    一元运算符重载
    二元运算符重载
    重载函数和重载运算符
    Linux之文件通信
    Linux进程通信之mmap
    Linux之创建多个子进程
    内联函数
    静态成员
    this指针
  • 原文地址:https://www.cnblogs.com/lxzbky/p/12504426.html
Copyright © 2011-2022 走看看