我的java代码有点问题!问题是:13195的主要因素是5,7,13和29。
600851475143号码的最大主要因素是什么?
我的代码不知何故不起作用!!怎么了?谢谢你的帮助!
public class Example_1 {
public static void main (String[] args){
{
System.out.println(largestPrimeFactor(600851475143));
}
}
private static long largestPrimeFactor(long number) {
long result = 0;
for(long x = 2;x<number;x++){
if(number % x == 0){
for( long y = 2; y < x ; y++ ){
if( x % y == 0){
break;
}
else{
result = x;
}
}
}
}
return result;
}
}
答案 0 :(得分:2)
for( long y = 2; y < x ; y++ ){
if( x % y == 0){
break;
}
else{
result = x;
}
}
在这里,您要测试x
是否为素数。但是,如果您遵循此循环逻辑,您将看到它转换为以下内容:
y
是否为素数之前发现任何x
不是x
的因素,那么{{1}是素数。将x
重构为循环外部。
else
编译问题:
boolean xIsPrime = true;
for( long y = 2; y < x ; y++ ){
if( x % y == 0){
xIsPrime = false;
break;
}
}
if( xIsPrime ){
result = x;
}
似乎在课堂之外。largestPrimeFactor
对于int来说太大了。使用600851475143
的后缀:L
。请注意,您编写的算法不是最理想的,这就是为什么在给定大输入时它可能会运行很长时间。
答案 1 :(得分:-1)
public class Example_1 {
public static void main (String[] args){
System.out.println(largestPrimeFactor(600851475143L));
}
private static long largestPrimeFactor(long number) {
long result = 0;
if (number % 2 == 0){
result = 2;
while (number % 2 == 0)
number /= 2;
}
for(long x = 3; number > 1; x += 2)
if (number % x == 0){
result = x;
while (number % x == 0)
number /= x;
}
return result;
}
}