您的位置:首页 > 其它

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

2015-12-21 15:49 302 查看
素数在小学数学也叫质数

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

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

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

实现程序如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: