Напечатать все пары дружественных чисел - PascalABC.NET
Формулировка задачи:
Дано натуральное число n. Напечатать все пары дружественных чисел, не превосходящих n (два натуральных числа называются дружественными, если каждое из них равно сумме делителей другого, исключая сами числа).
Решение задачи: «Напечатать все пары дружественных чисел»
textual
Листинг программы
uses System.Linq; type P = KeyValuePair<integer, integer>; begin var n := ReadLnInteger('n = '); var dividers := Enumerable.Range(1, n).Select(number -> new P(number, Enumerable.Range(1, number - 1).Where(i -> (number mod i) = 0).Sum())); var dic := dividers.ToDictionary(pair -> pair.key, pair -> pair.Value); dic.Add(0, 0); foreach var T in dic do if T.Value <= n then begin var V := dic[T.Value]; if (V = T.Key) and (V <> T.Value) {and (V < T.Value)} then writeln(T.Key, ' ', T.Value); end; end.
Объяснение кода листинга программы
Код решает задачу поиска всех пар дружественных чисел.
- uses System.Linq; — подключаем пространство имен для работы с последовательностями
- type P = KeyValuePair<integer, integer>; — определяем тип для хранения пар чисел
- var n := ReadLnInteger('n = '); — считываем из консоли число n, которое равно количеству чисел для проверки на дружественность
- var dividers := Enumerable.Range(1, n).Select(number -> new P(number, — создаем последовательность делителей для каждого числа от 1 до n
- Enumerable.Range(1, number — 1).Where(i -> (number mod i) = 0).Sum())); — вычисляем сумму делителей числа
- var dic := dividers.ToDictionary(pair -> pair.key, pair -> pair.Value); — преобразуем последовательность в словарь, где ключи — это числа, а значения — их сумма делителей
- dic.Add(0, 0); — добавляем пару (0, 0) в словарь, так как любое число делится на 0
- foreach var T in dic do — проходим по всем парам чисел в словаре
- if T.Value <= n then — проверяем, чтобы значение не превышало число n
- var V := dic[T.Value]; — получаем соответствующее число из словаря
- if (V = T.Key) and (V <> T.Value) {and (V < T.Value)} then writeln(T.Key, ' ', T.Value); — выводим пару чисел на экран, если они являются дружественными (равны по модулю, но не равны друг другу и меньше n)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д