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;
    }

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

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

    实现程序如下:

  • 相关阅读:
    不定长内存池之apr_pool
    FFmpeg介绍及参数详细说明
    Linux下ffmpeg安装与开发配置
    基于Live555,ffmpeg的RTSP播放器直播与点播
    ffmpeg开发指南
    boost::bind的使用方法
    开启Linux VNC远程桌面
    Fedora 启动 SSH服务
    Linux中查看进程及杀死进程命令
    __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )
  • 原文地址:https://www.cnblogs.com/jjzzx/p/5063658.html
Copyright © 2011-2022 走看看