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