>* заданного пользователем, по алгоритму "Решета Эратосфена".
>*
>* Эратосфен Киренский, 276 год до н.э., Ливия -- * 194 год до н.э., Александрия.
>* Первый ученый, вычисливший длину земного меридиана. Известен своими работами
>* о календарях с високосным годом, заведовал Александрийской библиотекой.
>*
>* Алгоритм весьма прост. Берем массив целых чисел, начиная с 2, и вычеркиваем
>* из него все числа, кратные 2. Находим следующее невычеркнутое число
>* и вычеркиваем все его кратные. Повторяем до тех пор, пока не дойдем
>* до квадратного корня верхней границы диапазона.
>*
>* @author Альфонс
>* @version 13 февраля 2002 u
>*/
>import java.util.*;
>public class GeneratePrimes
>{
> /**
> * @param maxValue - верхняя граница диапазона.
> */
> public static int[] generatePrimes(int maxValue)
> {
> if (maxValue >= 2) // Единственно допустимый случай
> {
> // Объявления
> int s = maxValue + 1; // Размер массива
> boolean[] f = new boolean[s];
> int i;
> // Инициализировать массив значениями true.
> for (i = 0; i < s; i++)
> f[i] = true;
> // Удалить числа, заведомо не являющиеся простыми.
> f[0] = f[1] = false;
> // Отсев
> int j;
> for (i = 2; i < Math.sqrt(s) + 1; i++)
> {
> if (f[i]) // Если элемент i не вычеркнут, вычеркнуть кратные ему.
> {
> for (j = 2 * i; j < s; j += i)
> f[j] = false; // Кратные числа не являются простыми.
> }
> }
> // Сколько простых чисел осталось?
> int count = 0;
> for (i = 0; i < s; i++)
> {
> if (f[i])
> count++; // Приращение счетчика
> }
> int[] primes = new int[count];
> // Переместить простые числа в результат
> for (i = 0, j = 0; i < s; i++)
> {
> if (f[i]) // Если простое
> primes[j++] = i;
> }
> return primes; // Вернуть простые числа
> }
> else // maxValue < 2
> return new int[0]; // Вернуть пустой массив при недопустимых входных данных.
> }
>}
В листинге 4.8 приведена переработанная версия того же модуля. Обратите внимание: применение комментариев стало намного более ограниченным. Во всем модуле осталось всего два комментария пояснительного характера.
Листинг 4.8. PrimeGenerator.java (переработанная версия)
>/**
>* Класс генерирует простые числа до максимального значения, заданного
>* пользователем, по алгоритму "Решета Эратосфена".
>* Берем массив целых чисел, начиная с 2, и вычеркиваем
>* из него все числа, кратные 2. Находим следующее невычеркнутое число
>* и вычеркиваем все числа, кратные ему. Повторяем до тех пор, пока из массива