class LargestPrimeFactor{
public static void main(String args[]){
long p=0L;
long n=600851475143L;
for(long i=2L;i<(n/2);i++){
if((BigInteger.valueOf(i)).isProbablePrime(1)){
if(n%i==0){
p=i;
}
}
}
System.out.println(p);
}
}
这是 problem 3 from Project Euler 。我编译了它,没有出现任何错误。但我没有得到任何输出。原因是什么?
最佳答案
它正在工作(例如,只需在循环内添加一个打印方法来检查 i )。
您当前正在使用暴力破解方法:
http://www.mathblog.dk/project-euler-problem-3/
如果您访问该链接,该人会告诉您替代解决方案。
我对此没有太多了解的情况下看到的问题是
您当前所做的操作太多了。
您将值“600851475143
”存储在长数据类型中,并且您尝试
使用 int i(for 循环中的计数器)达到一半 (300425737571,5
)。
https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#MAX_VALUE
这告诉我们:“一个常量保存 int 可以具有的最大值,
2^(31)-1." = 2147483647
这只是您实际需要的0,00715 (0,7%)
。
所以这导致我们“溢出”。
考虑使用替代方法(第一个链接)
并将 for 循环的计数器更改为“long”。
关于java - 没有获得简单 java 程序的输出来找到最大素因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44371605/