Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Алгоритм [ править ]

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

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

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

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

Правильность [ править ]

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

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

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

def  sieve_of_Sundaram ( n ):  "" "Решето Сундарама - это простой детерминированный алгоритм для поиска всех простых чисел вплоть до указанного целого числа." ""  k  =  ( n  -  2 )  //  2  integer_list  =  [ True ]  *  ( k  +  1 )  для  i  в  диапазоне ( 1 ,  k  +  1 ):  j  =  i,  а  i  +  j  +  2  *  i  * j  <=  k :  inteers_list [ i  +  j  +  2  *  i  *  j ]  =  False  j  + =  1,  если  n  >  2 :  print ( 2 ,  end = '' )  для  i  в  диапазоне ( 1 ,  k  +  1 ):  if  список_целых [ i ]:  print ( 2  *  i  +  1,  конец = '' )

См. Также [ править ]

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Реализация решета Сундарама на C99 с использованием битовых массивов