Найти тему
ZDG

Проект Эйлер 21: Дружественные числа

Задача

Пусть d(n) определяется как сумма делителей n (числа меньше n, делящие n нацело).
Если d(
a) = b и d(b) = a, где ab, то a и b называются дружественной парой, а каждое из чисел a и b - дружественным числом.

Например, делителями числа 220 являются 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 и 110, поэтому d(220) = 284. Делители 284 - 1, 2, 4, 71, 142, поэтому d(284) = 220.

Подсчитайте сумму всех дружественных чисел меньше 10000.

Решение

Ну в общем опять двадцать пять, нас заставляют искать делители. Мне это уже поднадоело, поэтому я решил совсем нагло погуглить, вдруг есть какие-то более волшебные способы решения. Но судя по всему, лучше чем поиск делителей перебором ничего не придумано.

Поэтому с чистой совестью повторю код из прошлых задач. Функция нахождения делителей, а также их суммы:

Маленькое отличие от предыдущих задач в том, что 1 тоже считается делителем.

Расчёт:

-2

И результат:

-3

Ссылка на онлайн-компилятор языка C с текстом программы

Ну и наверно больше добавить нечего, всё это обсосано в предыдущих задачах, так что подождём, когда появятся более интересные задачи.

Подборка всех задач:

Проект Эйлер | ZDG | Дзен