zadach276.PAS

{* Задача 276 *}

Unit ZADACH276;
Interface
Implementation
Begin
 writeln('ДРУЖЕСТВЕННЫЕ числа - два натуральных числа, каждое из которых равно сумме правильных делителей другого (т. е. делителей, меньших этого числа). Напр., 284 и 220. Составить программу, которая находит все дружественные числа в интервале [1; 10000]. ');
End.

Program zadach276;

Uses zadach276.pas; {* Эту строку можно удалить *}
Uses crt; {* Вызов внешних функций *}
Var {* В работе нам потребуются переменные: *}
  a  : longint; {первое число}
  b  : integer; {делители числа s}
  i  : integer; {делители числа a}
  s  : integer; {сумма делителей первого числа}
  s1 : integer; {сумма делителей s}
Begin
  clrscr; {* Очистка экрана *}
  writeln ('Программа, находящая все дружественные');
  writeln ('числа в интервале от 1 до 10000');
  readln; {* Ждем подтверждения пользователя *}
  For a := 2 To 10000 Do {цикл для проверки первых чисел}
  Begin
    s := 0;
    For i := 1 To a - 1 Do {находим все делители числа а,                                   исключая само число}
    Begin
      If a Mod i = 0 Then {находится сумма делителей числа а}
      Begin
        s := s + i;
      End;
      
    End;
    s1 := 0;
    For b := 1 To s - 1 Do {цикл для проверки вторых чисел,                                      которые являются суммой                                                       делителей первого числа}
    Begin
      If s Mod b = 0 Then {находим все делители чила s                                                     (сумма делителей числа а)}
      Begin
        s1 := s1 + b;
      End;
      
    End;
    If (s1 = a) And (sa) Then {сумма делителей суммы                                                     делителей числа а должна                                                        быть равна числу а, а                                                           сумма делителей числа а                                                     не должна быть равна                                                     этому числу}
    Begin
      writeln ('Числа ', a, ' и ', s, ' - дружественные');
    End;
    
  End;
  readln; {* Приостановка программы. Ожидание Enter *}
End.