Я работал над кодом для Сито Эратосфена в Java, но у меня возникли некоторые проблемы с эффективностью времени и пространства.
Вот код:
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 .
И код, кажется, работает нормально, но я бы хотел еще немного его ускорить. Есть предложения?