抱歉,此代码必须删除。
答案 0 :(得分:1)
如果y
不是素数,那么找到最小素因子的循环不起作用:
// finds smallest prime divisor
for (int n = 0; n < Nth_prime; n++) {
BigInteger modded = y.mod(primes.get(n));
if (modded.equals(zero)) {
retval = primes.get(n).intValue();
}
}
它找到最大素数因子,因为它在找到第一个素因子时不会停止。因为1807的因子分解是13 x 139,所以它跳过13并返回139。
在指定break
后放置retval
:
for (int n = 0; n < Nth_prime; n++) {
BigInteger modded = y.mod(primes.get(n));
if (modded.equals(zero)) {
retval = primes.get(n).intValue();
break;
}
}
另外,我觉得很奇怪你在25,200次检查所有素数(并重新计算每次调用的所有25,200个)。您只需要通过y
的平方根检查素数。