Формулювання.
Дано два натуральних числа. Перевірити, чи є вони дружніми.
Примітка:
дружніми числами називаються два різних натуральних числа, для яких сума всіх власних дільників першого числа дорівнює другому числу і сума всіх власних дільників другого числа дорівнює першому числу.
Наприклад, 220 і 284 - пара дружніх чисел, тому що:
Сума власних дільників 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
Сума власних дільників 284: 1 + 2 + 4 + 71 + 142 = 220
Рішення.
Нам потрібно знайти не тільки суму власних дільників першого числа (позначимо число як n1, а суму його дільників sum1), але і другого числа (візьмемо позначення n2 і sum2 відповідно). Тоді відповіддю в задачі послужить порівняння: (n1 = sum2) and (n2 = sum1). Тут ми використовуємо логічні операції (нагадаємо, що логічне вираження X1 and X2 приймає значення істини тоді і тільки тоді, коли істинні булевські вирази X1 і X2, а в інших випадках воно приймає помилкове значення).
Однак запропоновану схему можна спростити.
Покажемо це на прикладі:
нехай дано числа 8 і 4.
Вважаємо суму власних дільників числа 8: 1 + 2 + 4 = 7. Це число відмінне від 4, тому пара вже не відповідає визначенню дружніх чисел.
Можна відразу вивести негативну відповідь, уникнувши підрахунку суми дільників другого числа.
Якщо були б дані числа 8 і 7, то необхідно було б обчислити суму власних дільників числа 7, вона дорівнює 1 (так як воно просте). Тепер необхідно порівняти суму власних дільників другого з першим числом: так як 1 відмінно від 8, цифри не дружні.
program AmicableTest;var
i, n1, n2, sum1, sum2: word;
begin
readln(n1, n2);
for i := 1 to n1 div 2 do begin
if n1 mod i = 0 then sum1 := sum1 + i
end;
if sum1 = n2 then begin
for i := 1 to n2 div 2 do begin
if n2 mod i = 0 then sum2 := sum2 + i
end;
writeln(sum2 = n1)
end
else begin
writeln('False')
end
end.
Немає коментарів:
Дописати коментар