素数在小学数学也叫质数
方法:所谓素数是指除了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;
}
在实际编程中,如果每个数都要判断是否是素数,采用上面的算法,时间复杂度会很大。这时就采用素数表,一下子就简化了时间复杂度。
方法如下:筛法产生素数表
实现程序如下: