zoukankan      html  css  js  c++  java
  • 判断素数与产生素数表(质数)

    素数在小学数学也叫质数

    方法:所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。因此判断一个整数m是否是素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。

         另外判断方法还可以简化。m不必呗2~m-1之间的每一个整数去除,只需被2~√m之间的每一个整数去除就可以了。如果m不能被2~√m间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。

    C++程序如下:

    #include<iostream>
    #include<cmath> //引用了数学函数平方根:sqrt()
    using namespace std;

    bool isprime(int x)
    {
        if(x==0||x==1) return 0; //将特殊情况0和1单独拿出来进行
        for (int i=2;i<=sqrt(x)+0.5;i++) // 想想为何+0.5?因为假如sqrt(9)返回2.999999999,n=2,结果可就错了。
            if (x%i==0) return false;
        return true;
    }

    int main()
    {
        freopen("p.in","r",stdin);
        freopen("p.out","w",stdout); //习惯用文件输入与输出,不明白的可参与相关资料
        int x;
        cin>>x;
        cout<<isprime(x)<<endl; //0表示不是素数,非0表示是素数

    return 0;
    }

     在实际编程中,如果每个数都要判断是否是素数,采用上面的算法,时间复杂度会很大。这时就采用素数表,一下子就简化了时间复杂度。

    方法如下:筛法产生素数表

    实现程序如下:

  • 相关阅读:
    Python3之format
    xml文件整理
    某系统采集2018
    sublime+python3 中文环境
    python3文本读取与写入常用代码
    redis3.0集群使用发现的一些问题
    mysql字符集
    redis3.0集群搭建
    安装Maven、nexus
    一键安装mysql5.6
  • 原文地址:https://www.cnblogs.com/jjzzx/p/5063658.html
Copyright © 2011-2022 走看看