Найти все простые числа, которые являются делителями одновременно m и n - Pascal
Формулировка задачи:
Найти все простые числа, которые являются делителями одновременно m и n
Решение задачи: «Найти все простые числа, которые являются делителями одновременно m и n»
textual
Листинг программы
function NOD(A, B : Integer) : Integer;
begin
repeat
if A > B then
A := A mod B
else
B := B mod A;
until (A = 0) or (B = 0);
NOD := A + B;
end;
procedure DecPrim(var n : Integer; p : Integer);
begin
Write(#32, p);
while n mod p = 0 do
n := n div p;
end;
var
m, n, Q, d : Integer;
begin
Write('m = '); ReadLn(m);
Write('n = '); ReadLn(n);
Q := NOD(m, n);
if Q = 1 then
WriteLn('Нет.')
else
begin
Write('Простые делители m и n :');
if Not odd(Q) then
DecPrim(Q, 2);
d := 3;
while Q > 1 do
begin
if Q mod d = 0 then
DecPrim(Q, d);
Inc(d, 2);
end;
end;
end.
Объяснение кода листинга программы
- В функции NOD(A, B) используется цикл repeat-until, который выполняется до тех пор, пока A не станет равным нулю или B не станет равным нулю. В каждой итерации цикла выполняется операция модуля между A и B. Если A больше B, то A приводится к B с помощью операции модуля. Если A меньше или равно B, то B приводится к A с помощью операции модуля.
- В процедуре DecPrim(var n : Integer; p : Integer), выводится значение переменной p с помощью функции Write(#32, p). Затем, в цикле while, происходит деление переменной n на p. Цикл продолжается до тех пор, пока n не станет равным нулю.
- В начале программы, с помощью функции ReadLn(m), считывается значение переменной m. Аналогично, с помощью функции ReadLn(n), считывается значение переменной n.
- Затем вызывается функция NOD(m, n), которая возвращает результат. Если результат равен 1, то выводится сообщение
Нет., что означает, что простые делители m и n не найдены. В противном случае, выводится сообщениеПростые делители m и n :, и затем, в цикле while, выводятся простые делители Q, начиная с наименьшего возможного значения (3). Если Q является простым числом и нечетным, то вызывается процедура DecPrim(Q, 2), которая выводит этот делитель. Затем значение Q увеличивается на 2, и цикл повторяется. - В конце программы, переменные m и n уничтожаются с помощью оператора end, а переменная Q сохраняется в переменной d. Затем, если Q не является нечетным числом, то вызывается процедура DecPrim(Q, 2). Значение Q увеличивается на 2, и цикл повторяется, пока Q не станет равным 1.