Дружественные числа – это два натуральных числа, таких, что сумма всех делителей одного числа (меньших самого этого числа) равна другому числу, и наоборот. найдите все пары дружественных чисел, каждое из которых меньше 10000. используйте функцию, которая вычисляет сумму делителей числа.

Поляков Евгений Александрович

Учитель информатики высшей категории

Проверено учителем

Парами дружественных чисел, каждое из которых меньше 10000, являются: (220, 284), (1184, 1210), (2620, 2924), (5020, 5564) и (6232, 6368). Шаг 1: Определение функции суммы делителей Для решения задачи необходимо определить функцию s(n)s open paren n close paren, которая вычисляет сумму всех собственных делителей числа nn (все делители, кроме самого числа). Математически это выражается так: s(n)=(d|nd)ns open paren n close paren equals open paren sum over d vertical line n of d close paren minus nДля числа 220 делителями являются 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 и 110. Их сумма: 1+2+4+5+10+11+20+22+44+55+110=2841 plus 2 plus 4 plus 5 plus 10 plus 11 plus 20 plus 22 plus 44 plus 55 plus 110 equals 284Шаг 2: Алгоритм поиска пар Алгоритм поиска в диапазоне от 1 до 10000 строится следующим образом:

  1. Проходим циклом по каждому числу aa в заданном диапазоне. Вычисляем b=s(a)b equals s open paren a close paren. Если b>ab is greater than a (чтобы избежать повторов и исключить совершенные числа, где a=s(a)a equals s open paren a close paren) и b<10000b is less than 10000, проверяем второе условие. Вычисляем s(b)s open paren b close paren. Если s(b)=as open paren b close paren equals a, то пара (a,b)open paren a comma b close paren является дружественной.

Шаг 3: Вычисление результатов Применим алгоритм последовательно:

  • Для a=220a equals 220: s(220)=284s open paren 220 close paren equals 284. Проверяем s(284)s open paren 284 close paren: 1+2+4+71+142=2201 plus 2 plus 4 plus 71 plus 142 equals 220. Пара найдена. Для a=1184a equals 1184: s(1184)=1210s open paren 1184 close paren equals 1210. Проверяем s(1210)s open paren 1210 close paren: 1+2+5+10+11+22+55+110+121+242+605=11841 plus 2 plus 5 plus 10 plus 11 plus 22 plus 55 plus 110 plus 121 plus 242 plus 605 equals 1184. Пара найдена. Для a=2620a equals 2620: s(2620)=2924s open paren 2620 close paren equals 2924. Проверяем s(2924)s open paren 2924 close paren: 1+2+4+17+34+43+68+86+172+731+1462=26201 plus 2 plus 4 plus 17 plus 34 plus 43 plus 68 plus 86 plus 172 plus 731 plus 1462 equals 2620. Пара найдена. Для a=5020a equals 5020: s(5020)=5564s open paren 5020 close paren equals 5564. Проверяем s(5564)s open paren 5564 close paren: 1+2+4+13+26+52+107+214+428+1391+2782=50201 plus 2 plus 4 plus 13 plus 26 plus 52 plus 107 plus 214 plus 428 plus 1391 plus 2782 equals 5020. Пара найдена. Для a=6232a equals 6232: s(6232)=6368s open paren 6232 close paren equals 6368. Проверяем s(6368)s open paren 6368 close paren: 1+2+4+8+16+32+199+398+796+1592+3184=62321 plus 2 plus 4 plus 8 plus 16 plus 32 plus 199 plus 398 plus 796 plus 1592 plus 3184 equals 6232. Пара найдена.

Ответ: В диапазоне до 10000 существует 5 пар дружественных чисел:

  1. (220, 284)
  2. (1184, 1210)
  3. (2620, 2924)
  4. (5020, 5564)
  5. (6232, 6368)

Нужно ли вам реализовать код на языке Python для автоматизации этого поиска в более широком диапазоне?

Форма ответа

Ваш аватар