Сито Сундарама - Sieve of Sundaram

В математика, то сито Сундарама это простой детерминированный алгоритм для поиска всех простые числа до указанного целого числа. Это было обнаружено Индийский математик г-н С. П. Сундарам в 1934 году.[1][2]

Алгоритм

Сито Сундарама: шаги алгоритма для простых чисел меньше 202 (не оптимизировано).

Начните со списка целых чисел от 1 до п. Из этого списка удалите все числа формы я + j + 2ij куда:

Остальные числа удваиваются и увеличиваются на единицу, давая список нечетных простых чисел (то есть всех простых чисел, кроме 2) ниже. 2п + 1.

Сито Сундарама отсеивает составные числа так же, как сито Эратосфена есть, но четные числа не рассматриваются; работа по «вычеркиванию» числа, кратного 2, выполняется последним шагом «двойное и приращение». Всякий раз, когда метод Эратосфена перечеркивал k различные кратные простого числа , Метод Сундарама зачеркивает за .

Правильность

Если мы начнем с целых чисел от 1 к п, окончательный список содержит только нечетные целые числа из 3 к . Из этого окончательного списка были исключены некоторые нечетные целые числа; мы должны показать, что это именно составной нечетные целые числа меньше чем .

Позволять q быть нечетным целым числом в форме . Потом, q исключен если и только если k имеет форму , то есть . Тогда у нас есть:

Итак, нечетное целое число исключается из окончательного списка тогда и только тогда, когда оно имеет факторизацию вида - то есть, если он имеет нетривиальный нечетный множитель. Следовательно, список должен состоять ровно из набора нечетных основной числа меньше или равны .

def sieve_of_Sundaram(п):    "" "Решето Сундарама - это простой детерминированный алгоритм для поиска всех простых чисел до указанного целого числа." ""    k = (п - 2) // 2    целые_список = [Истинный] * (k + 1)    за я в классифицировать(1, k + 1):        j = я        пока я + j + 2 * я * j <= k:            целые_список[я + j + 2 * я * j] = Ложь            j += 1    если п > 2:        Распечатать(2, конец=' ')    за я в классифицировать(1, k + 1):        если целые_список[я]:            Распечатать(2 * я + 1, конец=' ')

Смотрите также

Рекомендации

  1. ^ В. Рамасвами Айяр (1934). «Сито Сундарама для простых чисел». Студент-математик. 2 (2): 73. ISSN  0025-5742.
  2. ^ Г. (1941). «Куриоза 81. Новое сито для простых чисел». Scripta Mathematica. 8 (3): 164.

внешняя ссылка