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

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

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

    实现程序如下:

  • 相关阅读:
    作业七—“南通大学教务管理系统微信公众号”用户体验分析
    作业6—成绩录入系统设计(第一阶段)
    作业5-需求分析(EX:南通大学成绩录入系统)
    几次接触Collection排序使用总结
    作业4-两人编程<词频统计>
    ACE智能指针
    Buddy Memorry
    子数组和与积
    数字转化为大写(16位以下)
    【阿里巴巴-飞猪旅行-内推】2020年应届实习生招聘
  • 原文地址:https://www.cnblogs.com/jjzzx/p/5063658.html
Copyright © 2011-2022 走看看