我遇到了項目歐拉問題3的一個奇怪問題。該方案適用於那些小的,像13195等號碼,但是當我嘗試緊縮大的數字,如600851475143它拋出這個錯誤:素數分解算法大數失敗
Exception in thread "main" java.lang.ArithmeticException:/by zero
at euler3.Euler3.main(Euler3.java:16)
這裏是我的代碼:
//Number whose prime factors will be determined
long num = 600851475143L;
//Declaration of variables
ArrayList factorsList = new ArrayList();
ArrayList primeFactorsList = new ArrayList();
//Generates a list of factors
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
factorsList.add(i);
}
}
//If the integer(s) in the factorsList are divisable by any number between 1
//and the integer itself (non-inclusive), it gets replaced by a zero
for (int i = 0; i < factorsList.size(); i++)
{
for (int j = 2; j < (Integer) factorsList.get(i); j++)
{
if ((Integer) factorsList.get(i) % j == 0)
{
factorsList.set(i, 0);
}
}
}
//Transfers all non-zero numbers into a new list called primeFactorsList
for (int i = 0; i < factorsList.size(); i++)
{
if ((Integer) factorsList.get(i) != 0)
{
primeFactorsList.add(factorsList.get(i));
}
}
爲什麼只有大數字導致這個錯誤?
哪一行是#16這裏? – 2011-05-16 06:08:10
你可以使用'ArrayList'來代替,所以你不需要強制轉換。 –
Spoike
2011-05-16 06:16:55
@Spoike:不是'ArrayList'''ArrayList ' - 您不能在Java中使用原始類型作爲泛型類型參數。 –
2011-05-16 06:17:53