Вы находитесь на странице: 1из 18

Основы

алгоритмизации
Лекция № 2
Примеры простых
алгоритмов для целых чисел
• Определить, является ли произвольное
целое число простым
• Алгоритм Евклида нахождения НОД
• Получить заданное количество первых
простых чисел (Решето Эратосфена)
Алгоритм проверки числа на
простоту
• Просто число – это число, имеющее ровно
два различных натуральных делителя —
единицу и самого себя
• Вариант 1. Перебираем подряд все целые
числа от 2 до самого числа и проверяем
остатки
• Вариант 2. Перебираем от 2 до самого
числа только нечетные
• Вариант 3. Перебираем от 2 до корня из
числа только нечетные
Проверка на простоту
bool prime(long long n){
for(long long i=2;i<=sqrt(n);i++)
if(n%i == 0)
return false;
return true;
}

4
bool prime(long long a)
{
if (a == 2)
return true;
if (a == 0 || a == 1 || a % 2 == 0)
return false;
long long i=3;
while (i*i <= a && a % i)
i += 2;
return i * i > a; 5

}
Наибольший общий делитель
Определение. Наибольший общий
делитель (НОД) нескольких чисел — это
наибольшее натуральное число, на
которое делится каждое из данных чисел.
НОД нескольких чисел равен
произведению всех общих простых
множителей этих чисел.
Алгоритм Евклида нахождения
НОД
a , b  0
НОД(a, b) = 
НОД(b, a mod b), b  0

Если a < b, то НОД(a, b) = НОД(b, a mod b) =


НОД(b, a), то есть аргументы функции
переставляются.
Далее при рекуррентных вызовах функции НОД
первый аргумент всегда больше второго.
Нулем может стать только второй аргумент b.
Бинарный алгоритм Евклида
В бинарном алгоритме Евклида
используется только проверка на чётность и
деление на 2.
НОД(a,b)=2НОД(a/2,b/2), если a и b четные,
НОД(a,b)=НОД(a/2,b), если a четное, b
нечетное,
НОД(a,b)=НОД(a,b/2), если a нечетное, b
четное,
НОД(a,b)=НОД(a−b,b), если a и b нечетные,
a≥b.
Нахождение НОД с помощью разложения
чисел на простые множители

• Наибольший общий делитель может быть найден


по разложениям чисел на простые множители.
Сформулируем правило:
• НОД двух целых положительных чисел a и b
равен произведению всех общих простых
множителей, находящихся в разложениях чисел a
и b на простые множители.
Найдите наибольший общий делитель
чисел 72 и 96
Решение.
Разложим на простые множители числа 72 и 96:
72=2·2·2·3·3
96=2·2·2·2·2·3
Общими простыми множителями являются 2, 2, 2 и 3.
Таким образом, НОД(72, 96)=2·2·2·3=24.

Ответ:
НОД(72, 96)=24.
Нахождение НОД трех и большего
количества чисел

Нахождение наибольшего общего делителя трех


и большего количества чисел может быть сведено к
последовательному нахождению НОД двух чисел.
Наибольший общий делитель нескольких чисел
a1, a2, …, ak равен числу dk, которое находится при
последовательном вычислении НОД(a1, a2)=d2,
НОД(d2, a3)=d3, НОД(d3, a4)=d4, …, НОД(dk-1,
ak)=dk.
Найти НОД (78, 294, 570 и 36)
1) По алгоритму Евклида определим
наибольший общий делитель d2 двух первых
чисел 78 и 294.
При делении получаем равенства
294=78·3+60; 78=60·1+18; 60=18·3+6 и 18=6·3.
Таким образом, d2=НОД(78, 294)=6.
2) Вычислим d3=НОД(d2, a3)=НОД(6, 570).
Т.к.570=6·95, значит, d3=НОД(6, 570)=6.
3) Вычислим d4=НОД(d3, a4)=НОД(6, 36)
=6.
Нахождение наименьшего общего
кратного (НОК) данных чисел

• Наименьшим общим кратным данных


натуральных чисел называют наименьшее
натуральное число, кратное каждому из
данных чисел.
Пример.
НОК(24, 42)=168. Это самое маленькое
число, которое делится и на 24, и на 42.
Нахождение наименьшего общего
кратного

Для нахождения НОК нескольких данных


натуральных чисел надо:
1) разложить каждое из данных чисел на
простые множители;
2) выписать разложение большего из
чисел и умножить его на недостающие
множители из разложений других чисел.
Наименьшее кратное двух взаимно
простых чисел равно произведению этих
чисел.
Найти НОК(35; 40)
Разложим числа 35 и 40 на простые
множители

35=5∙7,   40=2∙2∙2∙5 или 40=23∙5


Берем разложение большего числа 40 и дополняем
его недостающими         множителями. 
НОК(35; 40)=23∙5∙7=40∙7=280.
Ответ: НОК(35; 40)=280.
Найти НОК (75; 120; 150)
Разложим числа 75, 120 и 150 на простые
множители.
75=3∙52,    120=23∙3∙5,  150=2∙3∙52
Возьмем разложение большего числа 150 и
дополним его двумя «двойками», так как в
разложении числа 120 имеется три «двойки», а в
разложении числа 150 – только одна.
НОК(75; 120; 50)=2∙3∙52∙2∙2=150∙4=600.
Ответ: НОК(75; 120; 150)=600.
РЕШЕТО ЭРАТОСФЕНА

2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50

Простые числа:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47.

Алгоритм:
1. Пусть p = 2 (первому простому числу).
2. Считая от р, шагами по р, зачеркнуть в списке все числа от 2р до n.
3. Найти первое не зачеркнутое число, большее чем p, и присвоить значение
17
переменной p это число.
4. Повторять шаги 3 и 4 до тех пор, пока p не станет больше чем n.
Решето Эратосфена