Страница: 1
2 3 4 5 6 7 >> [Всего задач: 55]
Даны два натуральных числа
a и
b, не равные нулю
одновременно. Вычислить
НОД(a,b) — наибольший общий
делитель
а и
b.
Решение
Вариант 1.
if a > b then begin
| k := a;
end else begin
| k := b;
end;
{k = max (a,b)}
{инвариант: никакое число, большее k, не является
общим делителем}
while not ((a mod k = 0) and (b mod k = 0)) do begin
| k := k - 1;
end;
{k - общий делитель, большие - нет}
Вариант 2 (алгоритм Евклида).
Будем считать, что
НОД(0,0)=0. Тогда
НОД(a,b) =
НОД(a-b,b) =
НОД(a,b-a);
НОД(a,0) =
НОД(0,a) =
a для всех
a,
b≥0.
m := a; n := b;
{инвариант: НОД (a,b) = НОД (m,n); m,n >= 0 }
while not ((m=0) or (n=0)) do begin
| if m >= n then begin
| | m := m - n;
| end else begin
| | n := n - m;
| end;
end;
{m = 0 или n = 0}
if m = 0 then begin
| k := n;
end else begin {n = 0}
| k := m;
end;
Написать модифицированный вариант алгоритма Евклида,
использующий соотношения
НОД(a,b) =
НОД(a mod b, b)
при
a≥b,
НОД(a,b) =
НОД(a, b mod a) при
b≥a.
Составить программу решения
предыдущей задачи, использующую
тот факт, что составное число имеет делитель, не
превосходящий квадратного корня из этого числа.
Решение
Во втором варианте решения вместо
l:=l+1
можно написать
if l*l > k then begin
| l:=k;
end else begin
| l:=l+1;
end;
|
[Степень двойки?]
|
|
Сложность: 2 Классы: 8
|
Является ли число степенью двойки?
Вводится число. Напечатать YES, если оно является степенью двойки,
NO - иначе
Пример входного файла
8
Пример выходного файла
YES
Пример входного файла
22
Пример выходного файла
NO
Подсказка
Задачи 104-106 - задачи на использование цикла
WHILE.
Решение
Скачать архив тестов
|
[Сумма цифр]
|
|
Сложность: 2 Классы: 8
|
Посчитать сумму цифр числа
Вводится число. Вывести сумму его цифр
Пример входного файла
157
Пример выходного файла
13
Решение
Скачать архив тестов
Страница: 1
2 3 4 5 6 7 >> [Всего задач: 55]