Напечатать все пары дружественных чисел, не превосходящих заданного натурального числа - C (СИ)
Формулировка задачи:
2. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого, за исключением самого себя (таковы, например, числа 220 и 284). Напечатать все пары дружественных чисел, не превосходящих заданного натурального числа. [/I]
Решение задачи: «Напечатать все пары дружественных чисел, не превосходящих заданного натурального числа»
textual
Листинг программы
for(k=2; k<=N; k++) {
s = 1;
for(j=2; j <= k/2; j++)
if (k%j==0) s+= j;
if (s < k) continue;
if (s==k) printf("%d %d\n", k, k);
else {
s2 = 1;
for(j=2; j <= s/2; j++)
if (s%j==0) s2+= j;
if (s2==k) printf("%d %d\n", k, s);
}
}
Объяснение кода листинга программы
В этом коде:
- Переменная
Nсодержит число, которое не должно быть превышено парами дружественных чисел. - Переменная
kинициализируется значением 2 и увеличивается на 1 до тех пор, пока не станет меньше или равнойN. Это делается для того, чтобы проверить все числа доN. - Переменная
sинициализируется значением 1 и увеличивается на сумму всех делителей числаk, которые меньше его половины. Еслиsстанет равнымk, то числа являются дружественными. В этом случае числаkиsвыводятся на экран. - Если
sменьшеk, то переходим к следующему числу. - Если
sбольшеk, то переходим к переменнойs2, которая инициализируется значением 1 и увеличивается на сумму всех делителей числаs, которые меньше его половины. Еслиs2станет равнымk, то числаkиsвыводятся на экран.