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 += dd += 1.

于 2013-03-05T00:50:08.107 回答
3

d的溢出来了,我打印在n里面:dwhile (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——现在你只检查两个的幂,而不是所有连续的整数。

于 2013-03-05T00:54:15.047 回答
1

问题是您的 dInteger.Max超出限制并溢出。

于 2013-03-05T00:52:20.030 回答