public boolean isPrime(int k)
{
if(k==2)
return true;
if(k<2||k>2 && k%2==0)
return false;//去除1与所有偶数 ,剩余>=3的奇数
int j = (int)Math.sqrt(k);
if(j%2==0)
j--;//获得测试范围的最大奇数
while(j>2&& k%j!=0)
j-=2;
return j<2;
}
}
算法 首先去除素数2,然后去除1与所有的偶数,只对大于等于3的奇数进行判断,接着 对K进行平方向下取整赋给J;
根据算数基本定理:任何正整数N都可以表示成素数的乘积
N = P1...Pm,P1<=...Pm.
此外,此展开式是唯一的;
若P为素数则 m=1,
当jJ<2时,则返回 true,
当J>2时 ,执行J (或J-1)-= 2 直到 J<2返回true;
当K为合数(最小的奇合数是9)时,m>=2,可知 P1<=J(或J-1)<=Pm 且 J>=3,又P1属于J取值范围子集[J(或 J-1),J-2(或J-3),...,3],那么 K%J==0时,J定>=3 则返回false.