Advertisement
SmnVadik

№25 Lab2_1

Oct 27th, 2022 (edited)
151
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.89 KB | None | 0 0
  1. program Lab2_2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.   System.SysUtils;
  9.  
  10. Const
  11.     MIN = 1;
  12.     MAX = 1000000;
  13.  
  14. type
  15.     Arr = array[1..100] of Integer;
  16.  
  17. var
  18.     Mas: Arr;
  19.  
  20.  
  21. function Correct (): Double;
  22. var
  23.     N: Double;
  24.     IsCorrect: Boolean;
  25. begin
  26.     Repeat
  27.         IsCorrect := True;
  28.         Write('Введите натуральное число N: ');
  29.         Try
  30.             Readln(N);
  31.         If ((N < MIN) Or (N > MAX)) Then
  32.         Begin
  33.             IsCorrect := False;
  34.             Writeln('Вы вышли из диапазона вводимых данных!')
  35.         End;
  36.         if ((N = 1) Or (N = 2) Or (N = 3)) then
  37.         Begin
  38.             IsCorrect := False;
  39.             Writeln('Меньших N чисел Мерсенна нет!');
  40.             Writeln('Попробуйте ещё раз.');
  41.         End;
  42.         Except
  43.             IsCorrect := False;
  44.             Writeln('Проверьте корректность введенных данных!');
  45.         End;
  46.     Until (IsCorrect);
  47.     Correct := N;
  48. end;
  49.  
  50.  
  51. function Prost (N: Integer): Boolean;
  52. var
  53.     I: Integer;
  54.     IsCorrect: Boolean;
  55. begin
  56.     I := 2;
  57.     IsCorrect := True;
  58.     while (I < (Sqrt(N) + 1)) do
  59.     begin
  60.         If ((N Mod I) = 0) Then
  61.             IsCorrect := False;
  62.         I := I + 1;
  63.     end;
  64.     Prost := IsCorrect;
  65. end;
  66.  
  67.  
  68. function Power (P: Integer): Integer;  // Возведение 2 в степень P
  69. var
  70.     A: Integer;
  71.     I: Integer;
  72. begin
  73.     A := 1;
  74.     for I := 1 to P do
  75.         A := 2 * A;
  76.     Power := A;
  77. end;
  78.  
  79.  
  80. function Degree (N: Double): Integer;    // Находит степень нижестоящего числа, представленного в виде 2^p
  81. Var
  82.     P: Integer;
  83. Begin
  84.     P := 0;
  85.     Repeat
  86.         N := N / 2;
  87.         P := P + 1;
  88.     Until (N < 2);
  89.     Degree := P;
  90. End;
  91.  
  92.  
  93. procedure EnterArr (var Mas: Arr; P: Integer);
  94. var
  95.     IsCorrect: Boolean;
  96.     Num: Integer;
  97. Begin
  98.     for var I := 1 to P do
  99.     Begin
  100.         if (I = 1) then
  101.             IsCorrect := False
  102.         Else
  103.             if (I = 2) then
  104.                 IsCorrect := True
  105.             Else
  106.                 IsCorrect := Prost(I);
  107.                 if (IsCorrect = True) then
  108.                 Begin
  109.                     Num := Power(I);
  110.                     Mas[I] := Num - 1;
  111.                 End
  112.                 Else
  113.                     Mas[I] := 4;
  114.     End;
  115. End;
  116.  
  117.  
  118. procedure PrintArr (const Mas: Arr; P: Integer);
  119. var
  120.     I: Integer;
  121.     IsCorrect: Boolean;
  122. begin
  123.     Writeln('Меньшие N числа Мерсенна:');
  124.     For I := P downto 1 do
  125.     Begin
  126.         IsCorrect := Prost(Mas[I]);
  127.         If (IsCorrect) Then
  128.             Write(Mas[I], ' ')
  129.     End;
  130. end;
  131.  
  132.  
  133. var
  134.     Deg: Integer;
  135.  
  136. begin
  137.     Deg := Degree(Correct());
  138.     EnterArr(Mas, Deg);
  139.     PrintArr(Mas, Deg);
  140.  
  141.     Readln;
  142. End.
Advertisement
Comments
  • SmnVadik
    1 year
    # text 0.31 KB | 0 0
    1. Дано натуральное число n. Найти все меньшие n числа Мерсена. (Простое число называется числом Мерсена, если оно может быть представлено в виде 2р – 1, где р – тоже простое число.)
Add Comment
Please, Sign In to add comment
Advertisement