转自:http://www.cnblogs.com/edwardstudy/archive/2012/11/24/2784174.html
一.通过素数的基本性质
根据素数的性质(除了1和此整数(n)自身外,无法被其他自然数整除的数):即从2到n/2的数都不能整除n。
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
用大于2^63的数去测试,结果因为运算量太大,运行半个来小时也没有结果出现。
二.通过素数表
要提高速度就要减少进入判断方法中的循环:
1.偶数可以排除
2.大的合数(即素数的积)可以排除
排除偶数直接增加一个判断即可实现,而排除大的合数也通过产生一个素数表实现。
这里引援51CTO网友 梦朝思夕 的BOLG,即“一般来说整除100 以内的所有素数可排除76% 不是素数的可能性 整除256以内的所有素数可排除80% 不是素数的可能性。” 而我同样地建大小为2000的表,private static BigInteger[] primeList = new BigInteger[2000]
primeList[1999] = 17389
for(int i = 0, j = 2; i < 2000; j++) { if(isPrime(j)) { primeList[i] = BigInteger.valueOf(j); i++; } }
再来一个方法判断新生成的大数判断是否为几个素数的积