Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»
44
Решение. Задача похожа на
задачу 15, в которой поиск минимального делителя осуществ-
лялся с помощью цикла:
for i := 2
to n do begin
if n mod i = 0
then begin
writeln(i);
break
end
end;
Здесь все просто: проверяем все числа от 2 по возрастанию – если нашли делитель, выводим
его на экран и выходим из цикла с помощью
break. В нашем же случае нужно проверять делимость
двух введенных чисел. При этом цикл должен проходить по всем
i от 2 до минимального из чисел
m
и
n (назовем его
min), так как оно может быть наименьшим нетривиальным делителем, когда оно
простое.
Например, для чисел 17 и 34 таковым является 17.
Найти наименьшее из двух чисел можно так:
if n < m then min := n else min := m;
Кстати, теперь в цикле мы должны не просто вывести на экран найденный делитель, а сохра-
нить его в некоторую переменную (
mindiv), которая до входа в цикл будет равна 1 (или 0), чтобы
проверить, выполнилось ли условие делимости в цикле. Если да, то необходимо вывести значение
наименьшего общего делителя, а если нет, и
mindiv все еще равно 1 (или 0), то
вывести сообщение
об отсутствии делителя.
Код:
1.
program MinDivisor;
2.
3.
var
4.
m, n, i, min, mindiv: word;
5.
6.
begin
7.
readln(m, n);
8.
mindiv := 1;
9.
if n < m then min := n else min := m;
10.
for i := 2
to min do begin
11.
if (n mod i = 0) and (m mod i = 0) then begin
12.
mindiv := i;
13.
break
14.
end
15.
end;
16.
if mindiv <> 1 then writeln(mindiv) else writeln('No divi-
sors!')
17.
end.
Do'stlaringiz bilan baham: