0

私は最近 Java の学習を始めました。現在、いくつかの Eulerproject の問題を解決しようとしています。

タスクは次のとおりです:数 600851475143 の最大の素因数は何ですか?

このコードを作成できましたが、エラーが発生します。

コード

package exercises;
import java.util.ArrayList;

public class Euler3 {

    // Main code
    public static void main(String[] args) {


        System.out.println( getPrimeFactors(15) );
    }

    // Code for breaking a number to prime factors
    public static ArrayList getPrimeFactors(int n){

        ArrayList factors = new ArrayList();

        int d = 2;

        while(n > 1 ){
            while(n%d == 0 ){
                factors.add(d);
                n /= d;
            }
            d +=d;
        }

        return factors;
    }

}

エラー:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at exercises.Euler3.getPrimeFactors(Euler3.java:22)
    at exercises.Euler3.main(Euler3.java:9)

私は何を間違っていますか?
ありがとう

4

3 に答える 3

3

あなたdはあふれています、私は印刷nしてd中に入れましたwhile (n > 1)

    15 2
    15 4
    15 8
    15 16
    15 32
    15 64
    15 128
    15 256
    15 512
    15 1024
    15 2048
    15 4096
    15 8192
    15 16384
    15 32768
    15 65536
    15 131072
    15 262144
    15 524288
    15 1048576
    15 2097152
    15 4194304
    15 8388608
    15 16777216
    15 33554432
    15 67108864
    15 134217728
    15 268435456
    15 536870912
    15 1073741824
    15 -2147483648
    15 0

d++解決策は、ではなく、と思います。d+=d現在、すべての連続する整数ではなく、2の累乗のみをチェックしています。

于 2013-03-05T00:54:15.047 に答える
3

非常に単純な解決策として、行d += dを に変更してみてくださいd += 1

于 2013-03-05T00:50:08.107 に答える
1

問題は、あなたの d がInteger.Max限界を超えてオーバーフローしていることです。

于 2013-03-05T00:52:20.030 に答える