Совершенными называются числа, равные сумме своих делителей. Например, совершенным является число  28 , равное 1 + 2 + 4 + 7 + 14. Найдите все совершенные числа в интервале [1, 1000] — Pascal(Паскаль)

program nname;
uses Crt;
var k,i,a,b,sum:longint;
f:Boolean;
begin
f:=False;
ClrScr;
Write('a=');
Readln(a);
Write('b=');
Readln(b);
for i:=a to b do 
begin
sum:=0;
for k:=1 to i div 2 do 
if i mod k=0 then sum:=sum+k;
if sum=i then
begin
if f=False then Writeln('Найдены совершенные числа на отрезке [a;b]:');
f:=True;
Write(i,' ');
end;
end;
if f=False then Writeln('Совершенных чисел на отрезке [a;b] не найдено!') else Writeln;
Readln;
end.

Следующий вариант

var
  i, n: longint;
  divider: integer;
 
  bin, bs: integer;
  bin_s: string;
  a, b, check, s: LongInt;
begin
  // writeln('from'); readln(a);
  // writeln('to'); readln(b);
  a := 10;
  b := 50000000;
 
  for bin := 1 to 14 do
  begin
    bin_s := '';
 
    for bs := 1 to bin do bin_s := '1' + bin_s + '0';
    bin_s := '1' + bin_s;
 
    check := 0;
    for i := 1 to length(bin_s) do check:= check * 2 + (ord(bin_s[i]) - ord('0'));
 
    if check < a then continue;
    if check > b then break;
 
    s := 1;
    for divider := 2 to trunc(sqrt(check)) do
    begin
      if check mod divider = 0 then
        s := s + divider + (check div divider);
    end;
    if check = s then WriteLn(check);
  end;
end.

Leave a Comment

87 + = 97