我已經在Java中使用了代碼Sieve of Eratosthenes,但我面臨一些時間和空間效率問題。 下面的代碼:在java中提高Eratosthenes代碼的效率
import java.util.*;
class EratosthenesSeive
{
public static void main(String args[])
{
ArrayList<Long> myPrimeList = new ArrayList<Long>();
ArrayList<Long> myTempPrimeList = new ArrayList<Long>();
ArrayList<Boolean> isPrimeNumber = new ArrayList<Boolean>();
int index = 0;
long ul = 1500l;
long ll = 2;
do
{
myTempPrimeList.add(ll);
isPrimeNumber.add(true);
ll++;
}while(ll != (ul+1));
for(long i : myTempPrimeList)
{
if(isPrimeNumber.get(index))
{
myPrimeList.add(i);
for(long j = i ; j*i <= ul; j++)
{
isPrimeNumber.set(myTempPrimeList.indexOf(j*i),false);
}
}
index++;
}
System.out.println(myPrimeList);
}
}
似乎對輸入高達10^3是工作的罰款,在10^4它只是掛在10^5以上,我得到OutOfMemoryError。 而代碼似乎工作正常,但我想多扣一點。有什麼建議麼?
只好選擇對方的回答是正確的之一,因爲它甚至建議我如何使更多的堆空間。 :-) – 2012-02-22 18:46:42
不用擔心 - 這一切都是爲了解決問題! – dlev 2012-02-22 18:54:11
啊,幾乎不太一般的美... – Blindy 2012-02-22 18:59:07