最大的素因

时间:2014-10-25 21:04:40

标签: java

我的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;
    }
}

2 个答案:

答案 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;
    }

}