Алгоритмизация и программирование
Решето Эратосфена
Решето Эратосфена
Решето Эратосфена
Решето Эратосфена
2.07M
Категория: ПрограммированиеПрограммирование

Алгоритмизация и программирование

1. Алгоритмизация и программирование

1
§ 38. Целочисленные алгоритмы
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

2. Решето Эратосфена

Алгоритмизация и программирование, 11 класс
2
Решето Эратосфена
22 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Алгоритм:
1) начать с k = 2
Эратосфен Киренский
2) «выколоть» все числа через k, начиная с 2k··kk
(Eratosthenes, Ερατοσθδνη)
3) перейти к следующему «невыколотому» k
(ок. 275-194 до н.э.)
<=N N , то перейти к шагу 2
4) если kk·k<=
5) напечатать все числа, оставшиеся «невыколотыми»
Новая версия – решето Аткина .
?
Как улучшить?
высокая скорость, количество операций
O((N·log N)·log log N )
нужно хранить в памяти все числа от 1 до N
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

3. Решето Эратосфена

Алгоритмизация и программирование, 11 класс
3
Решето Эратосфена
Задача. Вывести все простые числа от 2 до N.
Объявление переменных:
const N = 100;
цел i, k, N = 100
логтаб A[2:N]
var i, k: integer;
A: array[2..N]
of boolean;
Сначала все невычеркнуты:
нц для i от 2 до N
for i:= 2 to N do
A[i]:= True;
A[i]:= да
кц
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

4. Решето Эратосфена

Алгоритмизация и программирование, 11 класс
4
Решето Эратосфена
Вычёркивание непростых:
k:= 2
нц пока k*k <= N
если A[k] то
i:= k*k
нц пока i <= N
A[i]:= нет
i:= i + k
кц
все
k:= k + 1
кц
К.Ю. Поляков, Е.А. Ерёмин, 2013
k:= 2;
while k*k <= N do begin
if A[k] then begin
i:= k*k;
while i <= N do begin
A[i]:= False;
i:= i + k
end
end;
k:= k + 1
end;
http://kpolyakov.spb.ru

5. Решето Эратосфена

Алгоритмизация и программирование, 11 класс
5
Решето Эратосфена
Вывод результата:
нц для i от 2 до N
если A[i] то
вывод i, нс
все
кц
К.Ю. Поляков, Е.А. Ерёмин, 2013
for i:= 2 to N do
if A[i] then
writeln ( i );
http://kpolyakov.spb.ru
English     Русский Правила