判断素数与产生素数表(质数)

素数在小学数学也叫质数

方法:所谓素数是指除了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;
}

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

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

实现程序如下:

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注