Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Lab2_2;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- Const
- MIN = 1;
- MAX = 1000000;
- type
- Arr = array[1..100] of Integer;
- var
- Mas: Arr;
- function Correct (): Double;
- var
- N: Double;
- IsCorrect: Boolean;
- begin
- Repeat
- IsCorrect := True;
- Write('Введите натуральное число N: ');
- Try
- Readln(N);
- If ((N < MIN) Or (N > MAX)) Then
- Begin
- IsCorrect := False;
- Writeln('Вы вышли из диапазона вводимых данных!')
- End;
- if ((N = 1) Or (N = 2) Or (N = 3)) then
- Begin
- IsCorrect := False;
- Writeln('Меньших N чисел Мерсенна нет!');
- Writeln('Попробуйте ещё раз.');
- End;
- Except
- IsCorrect := False;
- Writeln('Проверьте корректность введенных данных!');
- End;
- Until (IsCorrect);
- Correct := N;
- end;
- function Prost (N: Integer): Boolean;
- var
- I: Integer;
- IsCorrect: Boolean;
- begin
- I := 2;
- IsCorrect := True;
- while (I < (Sqrt(N) + 1)) do
- begin
- If ((N Mod I) = 0) Then
- IsCorrect := False;
- I := I + 1;
- end;
- Prost := IsCorrect;
- end;
- function Power (P: Integer): Integer; // Возведение 2 в степень P
- var
- A: Integer;
- I: Integer;
- begin
- A := 1;
- for I := 1 to P do
- A := 2 * A;
- Power := A;
- end;
- function Degree (N: Double): Integer; // Находит степень нижестоящего числа, представленного в виде 2^p
- Var
- P: Integer;
- Begin
- P := 0;
- Repeat
- N := N / 2;
- P := P + 1;
- Until (N < 2);
- Degree := P;
- End;
- procedure EnterArr (var Mas: Arr; P: Integer);
- var
- IsCorrect: Boolean;
- Num: Integer;
- Begin
- for var I := 1 to P do
- Begin
- if (I = 1) then
- IsCorrect := False
- Else
- if (I = 2) then
- IsCorrect := True
- Else
- IsCorrect := Prost(I);
- if (IsCorrect = True) then
- Begin
- Num := Power(I);
- Mas[I] := Num - 1;
- End
- Else
- Mas[I] := 4;
- End;
- End;
- procedure PrintArr (const Mas: Arr; P: Integer);
- var
- I: Integer;
- IsCorrect: Boolean;
- begin
- Writeln('Меньшие N числа Мерсенна:');
- For I := P downto 1 do
- Begin
- IsCorrect := Prost(Mas[I]);
- If (IsCorrect) Then
- Write(Mas[I], ' ')
- End;
- end;
- var
- Deg: Integer;
- begin
- Deg := Degree(Correct());
- EnterArr(Mas, Deg);
- PrintArr(Mas, Deg);
- Readln;
- End.
Advertisement
Comments
-
- Дано натуральное число n. Найти все меньшие n числа Мерсена. (Простое число называется числом Мерсена, если оно может быть представлено в виде 2р – 1, где р – тоже простое число.)
Add Comment
Please, Sign In to add comment
Advertisement