Решето Сундарама
Решето Сундара́ма — детерминированный алгоритм нахождения всех простых чисел до некоторого целого числа . Разработан индийским студентом Сундарамом в 1934 году.
Алгоритм предусматривает исключение из ряда натуральных чисел от 1 до всех чисел вида:
- ,
где индексы пробегают все натуральные значения, для которых , а именно значения и Затем каждое из оставшихся чисел умножается на 2 и увеличивается на 1. Полученная в результате последовательность представляет собой все простые числа в отрезке .
Обоснование
Алгоритм работает с нечётными натуральными числами большими единицы, представленными в виде , где является натуральным числом.
Если число является составным, то по определению оно может быть представлено в виде произведения двух нечётных чисел, больших единицы, то есть:
- , где и — натуральные числа. Раскрывая скобки, получаем, что
- , или
- , из чего следует, что
- .
Таким образом, если из ряда натуральных чисел исключить все числа вида (), то для каждого из оставшихся чисел число обязано быть простым. И, наоборот, если число является простым, то число невозможно представить в виде и, таким образом, не будет исключено в процессе работы алгоритма.
stdio.h> int main(void) {
int i,j,n,ind; scanf("%d",&n) char a[n+1]; for (i=1; i<=n; i++) a[i]=1;
for(i=1;2*i*(i+1)<n;i+) for(j=i;ind=2*i*j+i+j,ind<=n;j++) a[ind]=0; for(i=1;i<=n;i++) if(a[i]) printf("%d ",2*i+1); return 0;
} </source>
См. также
Ссылки
- Б. А. Кордемский. Математическая смекалка. — М.: ГИФМЛ, 1958.
- Baxter, Andrew. «Sundaram’s Sieve». Topics from the History of Cryptography. MU Department of Mathematics.