【发布时间】:2015-07-27 22:11:03
【问题描述】:
我试图找到一个大数的最大素数。例如,如果该数字是 573849284703,我的代码将如下所示:
public static void main(String[] args) {
long number = 573849284703l;
System.out.println(lgstprmfactor(number));
}
public static long lgstprmfactor(long number) {
for (long i = 286924642352l; i > 0; i--) {
if (number % i == 0 && isPrime(i) == true) {
long answer = i;
return answer;
}
}
return 0;
}
public static boolean isPrime(long i) {
for (long c = 2; c < i; c++) {
if (i % c == 0)
return false;
}
return true;
}
但是运行需要很长时间 - 有什么建议可以加快运行速度或优化代码吗?
【问题讨论】:
-
您可能需要查看Fermat's little theorem 以帮助检查素数。
-
这里是一个很好的参考,可以帮助您改进代码以适应其他方法。 stackoverflow.com/questions/23287/…
-
@TameHog - 只有当您可以对问题进行分区以便线程不需要同步时,这才会有效。分解不容易。有更好的方法;例如使用更好的算法。
标签: java prime-factoring