[英]The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143?
[英]What is the largest prime factor of the number 600851475143(Java)? What could be my mistake?
该代码适用于 int 数据类型,但 600851475143 似乎太大了。 我怎样才能让它工作? 它只是继续运行,从不给我答案。
public class Main {
public static void main(String[] args) {
long a = 600851475143L;
boolean prime = false;
long big = 0L;
for (long i = 1L; i < a; i++){
if (a % i == 0){
for (int j = 2; j < i/(float)2; j++){
if (i % j == 0){
prime = true;
break;
}
}
if(!prime){
big = i;
}
}
}
System.out.println(big);
}
}
您还需要对j
使用long
。
您的变量命名也有点误导:当数字不是素数时, prime
为真......
你的代码有很多问题。 我的第一个建议是使用命名变量编写干净简洁的代码。 其次,分析程序的运行时复杂性,即使它对大量输入运行很快。 您在if(a % i == 0)
条件内运行内部循环的事实使您的程序效率极低。
在这里,我提供了代码的重构版本,其中考虑了运行时复杂性和良好的变量名称:
public static void main(String[] args) {
System.out.println(largestPrimeFactorOf(600851475143L));
}
public static long largestPrimeFactorOf(long input)
{
List<Long> factors = new ArrayList<>();
// You start from 2, as 1 is not a prime number and also using 1 will cause an infinite loop
for (long i = 2L; i < input; i++) {
if (input % i == 0) {
factors.add(i);
while (input % i == 0) {
input /= i;
}
}
}
// As we always add a bigger number to the factor list, the last element is the greatest factor.
return factors.get(factors.size() - 1);
}
表示当输入是一个大素数时,这个程序仍然会很慢,例如 100000000019。为了有效地处理这种情况,最好使用有效的素数测试算法。 您可以搜索 web。 https://en.wikipedia.org/wiki/Primality_test
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.