Решето Ератосфена

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Решето́ Ератосфе́на в математиці — простий стародавній алгоритм знаходження всіх простих чисел менших деякого цілого числа n, що був створений давньогрецьким математиком Ератосфеном.

Метод[ред.ред. код]

Sieve of Eratosthenes animation.gif

Якщо потрібно знайти всі прості числа менші за певне число N, виписуються всі числа від 1 до N.

  1. Перше просте число - два. Викреслимо всі числа більші двох, які діляться на два (4, 6, 8 …).
  2. Наступне число, яке залишилося незакресленим (три), є простим. Викреслюємо всі числа більші трьох та кратні трьом (6, 9 …).
  3. Наступне незакреслене число (п'ять) є простим. Викреслимо всі числа більші п'яти та кратні п'яти (10, 15, 20, 25 …).
  4. Повторюємо операцію поки не буде досягнуто число N:
    • Наступне незакреслене число є простим. Викреслимо всі числа більші нього та кратні йому.

Числа, які залишилися незакресленими після цієї процедури - прості[1].

Оцінка складності[ред.ред. код]

Алгоритм потребує O(N) біт пам'яті та O(N \log \log N )) математичних операцій.

Приклад для n = 20[ред.ред. код]

Запишемо натуральні числа від 2 до 20 в рядок:

  2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20

Перше число в рядку 2 — просте. Викреслимо всі числа кратні 2 (кожне друге, починаючи з 2^2=4):

  2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20 

Наступне незакреслене число 3 — просте. Викреслимо всі числа кратні 3 (кожне третє, починаючи з 3^2=9):

  2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20 

Наступне незакреслене число 5 — просте. Викреслимо всі числа кратні 5 (кожне п’яте, починаючи з 5^2=25). І т. д.

Необхідно викреслити кратні для всіх простих чисел p, для яких p^2\le n. В результаті всі складені числа будуть викреслені, а залишаться всі прості числа. Для n = 20 вже після викреслювання кратних числу 3 всі складені числа виявляються викресленими.

Алгоритм решета Ератосфена у вигляді програми на псевдокоді для пошуку простих чисел менших
1 000 000
[ред.ред. код]

limit = 1000000
// початково вважаємо, що всі числа прості
// присвоєння змінній типу стрічка символів ''sieve$''  рядка, який складається з 1000000 літер "Р",
sieve$ = string of the character "P" with length limit
 
prime = 2  // 2 – перше просте число
 
repeat while prime² < limit 
// зміна літер "Р", порядковий номер (індекс) яких кратний ''prime'' (за виключенням індекса ''prime''), на "N" 
set the character at the index of each multiple of ''prime'' (excluding index ''prime'' * 1) in ''sieve$'' to "N"
// змінній ''prime'' присвоюється індекс наступної "Р" в стрічці ''sieve$''
prime = index of the next instance of "P" in ''sieve$'' after index ''prime''
end repeat

Див. також[ред.ред. код]

Решето Сундарама

Джерела[ред.ред. код]

  1. Weisstein, Eric W. Sieve of Eratosthenes(англ.) на сайті Wolfram MathWorld.