Я пишу метод поиска простых чисел до n (решето Эратосфена), да, это домашнее задание. Я хочу улучшить производительность в методе, который я написал. Я настраивал это в течение последних нескольких дней, но не могу следовать указанному псевдокоду и повышать производительность.
псевдокод выглядит следующим образом:
создайте очередь чисел для обработки
заполните очередь целыми числами от 2 до n включительно
создайте пустую очередь результатов для хранения простых чисел
повторите следующие шаги:
получить следующее простое число p, удалив первое значение из очереди чисел
поместить p в результирующую очередь простых чисел
выполнить цикл по очереди чисел, удаляя все числа, делящиеся на p
while(p меньше квадратный корень из n)
все остальные значения простые, поэтому перенесите их в очередь простых результатов
вот мой текущий метод:
public static Queue<Integer> getPrimes(int n) throws IllegalArgumentException
{
if (n<2)
{
throw new IllegalArgumentException();
}
Queue<Integer> integers = new LinkedList<Integer>();
Queue<Integer> primes = new LinkedList<Integer>();
for (int i = 2; i <= n ; i++) {
integers.add(i);
}
boolean[] isMultiple = new boolean[n + 1];
for(int iterate = integers.remove(); iterate <= n; iterate++)
{
if(!isMultiple[iterate])
{
primes.add(iterate);
for(int multiples = iterate * iterate; multiples >= 0 && multiples <= n; multiples += iterate)
{
isMultiple[multiples] = true;
}
}
}
return primes;
}