Advertisement
deced

Untitled

Oct 25th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.84 KB | None | 0 0
  1. uses math, SysUtils;
  2.  
  3. type
  4.     IntArray = Array of Int64;
  5.  
  6. function GetPrimes(N: Integer): IntArray;
  7. Var
  8.     Ret: IntArray;
  9.     I, J, Count: Integer;
  10. begin
  11.     SetLength(Ret, N);
  12.     for I := 0 to High(Ret) do
  13.         Ret[I] := I + 1;
  14.     for I := 1 to High(Ret) do
  15.         if (Ret[I] <> 0) then
  16.             for J := I + 1 to High(Ret) do
  17.                 if Ret[J] mod Ret[I] = 0 then
  18.                     Ret[J] := 0;
  19.     Count := 0;
  20.     for I := 1 to High(Ret) do
  21.         if (Ret[I] <> 0) then
  22.         begin
  23.             Ret[Count] := Ret[I];
  24.             inc(Count);
  25.         end;
  26.     SetLength(Ret, Count);
  27.     GetPrimes := Ret;
  28. end;
  29.  
  30. function GetN(): Byte;
  31. Var
  32.     IsCorrect: Boolean;
  33.     Ret: Integer;
  34. begin
  35.     repeat
  36.         IsCorrect := True;
  37.         Writeln('Введите N');
  38.         try
  39.             Readln(Ret);
  40.         except
  41.             Writeln('N должно быть числом');
  42.             IsCorrect := False;
  43.         end;
  44.         if (Ret < 1) or (Ret > 64) and IsCorrect then
  45.         begin
  46.             Writeln('N должно быть целым числом большим нуля и меньшим 65');
  47.             IsCorrect := False;
  48.         end;
  49.     until IsCorrect;
  50.     GetN := Ret;
  51. end;
  52.  
  53. procedure PrintArray(ArrayToPrint: IntArray);
  54. var
  55.     I: Integer;
  56. begin
  57.     Writeln('Числа мерсена равны ');
  58.     for I := 0 to High(ArrayToPrint) do
  59.         Writeln(ArrayToPrint[I]);
  60. end;
  61.  
  62. procedure GetMersennePrimes();
  63. var
  64.     MersennePrimes, Primes: IntArray;
  65.     I, N: Integer;
  66. begin
  67.     N := GetN();
  68.     Primes := GetPrimes(N);
  69.     SetLength(MersennePrimes, Length(Primes));
  70.     for I := 0 to High(MersennePrimes) do
  71.         MersennePrimes[I] := Round(Power(2, Primes[I]) - 1);
  72.     PrintArray(MersennePrimes);
  73. end;
  74.  
  75. begin
  76.     GetMersennePrimes();
  77.     Readln;
  78.  
  79. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement