对于一个大于1的整数,如果其除数只有1和它本身,那么它就是一个素数(Prime)。
如何确定一个数字是否是素数?可以采用穷举法,检测
是否能整除
。如果不能,那么
就是素数。这个算法耗费
时间来检测
是否是一个素数。然而,只需要检测
是否能整除
。如果不能,那么
就是素数。算法的效率提高了一些,它的复杂度仍是
。
实际上,我们可以证明,如果不是素数,那么
必须有一个大于1且小于或等于
的因子。下面是证明的过程。因为
不是素数,则必然存在两个数
和
,且满足
且
。注意
。
必须小于或等于
。因此,只需要检测
是否能整除
。如果不能,
就是素数。这会显著的降低时间复杂度,为
。
先给出检测是否为素数的代码:
public static boolean isPrime(int n){
boolean isprime = true;
int squareRoot = (int)(Math.sqrt(n));
for(int divisor =2;divisor<=squareRoot;divisor++){
if(n%divisor==0){
isprime=false;
break;
}
}
return isprime;
}