Advertisement
green1ant

2_2 working

Oct 28th, 2018
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.57 KB | None | 0 0
  1. program Project2;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   SysUtils,
  5.   Math;
  6.  
  7. const
  8.    ErrorMessage = 'Error! P should be natural number from 1 to 2147483647';
  9. type
  10.    TArray = array of Integer;
  11.  
  12. procedure EnterP(var P : Integer);
  13. var
  14.    Input : string;
  15.    IsCorrect : Boolean;
  16. begin
  17.    IsCorrect := False;
  18.    repeat
  19.       try
  20.          Writeln('Enter P');
  21.          Readln(Input);
  22.          P := StrToInt(Input);
  23.          if P < 1 then
  24.             Writeln(ErrorMessage)
  25.          else
  26.             IsCorrect := True
  27.       except
  28.          Writeln(ErrorMessage);
  29.       end;
  30.    until IsCorrect;
  31. end;
  32.  
  33. function GetSumOfDividers(N : Integer) : Integer;
  34. var
  35.    i, Last, Sum: Integer;
  36. begin
  37.  
  38.    Sum := 1;
  39.    Last := Trunc(Sqrt(N));
  40.    //Write('1, ');
  41.    for i := 2 to Last do
  42.       if N mod i = 0 then
  43.       begin
  44.          if i*i = N then
  45.          begin
  46.             Sum := Sum + i;
  47.             //Write(i, ' ');
  48.          end
  49.          else
  50.          begin
  51.             Sum := Sum + i + (N div i);
  52.             //Write(i, ' + ', N div i, ', ');
  53.          end;
  54.       end;
  55.  
  56.    //Writeln('(', Sum, ')');
  57.    GetSumOfDividers := Sum;
  58. end;
  59.  
  60. function IsPerfect(N : Integer) : Boolean;
  61. begin
  62.    if GetSumOfDividers(N) = N then
  63.       IsPerfect := True
  64.    else
  65.       IsPerfect := False;
  66. end;
  67.  
  68. procedure Main;
  69. var
  70.    P, i, x : Integer;
  71. begin
  72.    EnterP(P);
  73.    //Writeln(GetSumOfDividers(P));
  74.  
  75.    for i := 1 to P do
  76.       if IsPerfect(i) then
  77.       begin
  78.          Write(i, ', !!!');
  79.          //Writeln(GetSumOfDividers(i));
  80.       end;
  81.    Readln;
  82. end;
  83.  
  84. begin
  85.    Main;
  86. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement