来自 LG 的数学计划第一步,素数判定。
素数(prime number)又称质数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
根据定义,我们可以写出这样一段判断素数的代码
bool Prime(int x){
if(x==1)return false;//显然,1不是素数
for(int i=2;i<x;i++)if(x%i==0)return false;//如果在这之间有能够整除的数,说明不是素数
return true;//要是没有找到说明就是素数
}
看的出来,对于一个数x,我们要判断它是不是素数就要依次遍历2~x-1。其实,我们是可以减少一些判断的;
下面来看一段数学证明:
不妨设当前需要判断的 x 可以分解成 x1 * x2 ;
x=x1*x2;
不妨设x1<=x2;
∴x1^2<=x;
那么,x的小一点的那个因数(也就是x1)肯定 x1<=sqrt(x) 的;
所以,我们的搜索也就只需要在sqrt(x)之内了;
bool Prime(int x){
if(x==1)return false;
for(int i=2;i<=sqrt(x);i++)//只有这里循环条件有了一点变化
if(x%i==0)return false;
return true;
}
好了,素数的判定及优化就到这里讲完了,是不是很简单呢~