Решето Сундарама: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
1kovand1 (обсуждение | вклад) →Преамбула: очевидная опечатка |
|||
(не показано 7 промежуточных версий 4 участников) | |||
Строка 4: | Строка 4: | ||
Алгоритм предусматривает исключение из ряда [[натуральное число|натуральных чисел]] от 1 до <math>N</math> всех чисел вида: |
Алгоритм предусматривает исключение из ряда [[натуральное число|натуральных чисел]] от 1 до <math>N</math> всех чисел вида: |
||
: <math>i+j+2ij</math>, |
: <math>i+j+2ij</math>, |
||
где индексы <math>i\leqslant j</math> пробегают все натуральные значения, для которых <math>i+j+2ij \leqslant N</math>, а именно значения <math>i=1,\;2,\;\ldots,\;\left\lfloor \frac{\sqrt{2N+1}-1}2\right\rfloor</math> и <math>j=i,\;i+1,\;\ldots,\;\left\lfloor \frac{N-i}{2i+1}\right\rfloor.</math> Затем каждое из оставшихся чисел умножается на 2 и увеличивается на 1. Полученная в результате последовательность представляет собой все простые числа в отрезке <math>[ |
где индексы <math>i\leqslant j</math> пробегают все натуральные значения, для которых <math>i+j+2ij \leqslant N</math>, а именно значения <math>i=1,\;2,\;\ldots,\;\left\lfloor \frac{\sqrt{2N+1}-1}2\right\rfloor</math> и <math>j=i,\;i+1,\;\ldots,\;\left\lfloor \frac{N-i}{2i+1}\right\rfloor.</math> Затем каждое из оставшихся чисел умножается на 2 и увеличивается на 1. Полученная в результате последовательность представляет собой все простые числа в отрезке <math>[3,2N+1]</math>. |
||
== Обоснование == |
== Обоснование == |
||
Строка 16: | Строка 16: | ||
Таким образом, если из ряда натуральных чисел исключить все числа вида <math>2ij + i + j</math> (<math>1 \leqslant i \leqslant j</math>), то для каждого из оставшихся чисел <math>m</math> число <math>2m+1</math> обязано быть простым. И, наоборот, если число <math>2m+1</math> является простым, то число <math>m</math> невозможно представить в виде <math>2ij+i+j</math> и, таким образом, <math>m</math> не будет исключено в процессе работы алгоритма. |
Таким образом, если из ряда натуральных чисел исключить все числа вида <math>2ij + i + j</math> (<math>1 \leqslant i \leqslant j</math>), то для каждого из оставшихся чисел <math>m</math> число <math>2m+1</math> обязано быть простым. И, наоборот, если число <math>2m+1</math> является простым, то число <math>m</math> невозможно представить в виде <math>2ij+i+j</math> и, таким образом, <math>m</math> не будет исключено в процессе работы алгоритма. |
||
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> |
|||
== См. также == |
== См. также == |
||
* [[Корекурсия]] |
* [[Корекурсия]] |
Текущая версия от 18:20, 28 февраля 2024
Решето Сундара́ма — детерминированный алгоритм нахождения всех простых чисел до некоторого целого числа . Разработан индийским студентом Сундарамом в 1934 году.
Алгоритм предусматривает исключение из ряда натуральных чисел от 1 до всех чисел вида:
- ,
где индексы пробегают все натуральные значения, для которых , а именно значения и Затем каждое из оставшихся чисел умножается на 2 и увеличивается на 1. Полученная в результате последовательность представляет собой все простые числа в отрезке .
Обоснование
[править | править код]Алгоритм работает с нечётными натуральными числами большими единицы, представленными в виде , где является натуральным числом.
Если число является составным, то по определению оно может быть представлено в виде произведения двух нечётных чисел, больших единицы, то есть:
- , где и — натуральные числа. Раскрывая скобки, получаем, что
- , или
- , из чего следует, что
- .
Таким образом, если из ряда натуральных чисел исключить все числа вида (), то для каждого из оставшихся чисел число обязано быть простым. И, наоборот, если число является простым, то число невозможно представить в виде и, таким образом, не будет исключено в процессе работы алгоритма.
См. также
[править | править код]Ссылки
[править | править код]- Б. А. Кордемский. Математическая смекалка. — М.: ГИФМЛ, 1958.
- Baxter, Andrew. «Sundaram’s Sieve». Topics from the History of Cryptography. MU Department of Mathematics.