Advertisement
Solingen

z5.2.cpp

Dec 21st, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Проверка простоты
  5. bool isPrime(long long x)
  6. {
  7.     if (x < 2) return false;
  8.     for (long long i = 2; i*i <= x; i++)
  9.         if (x % i == 0) return false;
  10.     return true;
  11. }
  12.  
  13. // Возвращает n-ое простое число
  14. long long nthPrime(int n)
  15. {
  16.     int count = 0;
  17.     long long cur = 2;
  18.     while(true)
  19.     {
  20.         if (isPrime(cur))
  21.         {
  22.             count++;
  23.             if (count == n) return cur;
  24.         }
  25.         cur++;
  26.     }
  27. }
  28.  
  29. // Возвращает 2^p - 1
  30. long long mersenneNumber(long long p)
  31. {
  32.     long long M = 1;
  33.     for (int i = 0; i < p; i++)
  34.         M <<= 1; // побитовое смещение влево (ускоренный способ умножить на 2)
  35.     return M - 1;
  36. }
  37.  
  38. int main()
  39. {
  40.     int N;
  41.     cout << "Сколько чисел Мерсена вывести? ";
  42.     cin >> N;
  43.  
  44.     for (int i = 1; i <= N; i++)
  45.     {
  46.         long long p = nthPrime(i);
  47.         long long M = mersenneNumber(p);
  48.         cout << "M(" << p << ") = " << M;
  49.         if (isPrime(M)) cout << " (простое)\n";
  50.         else            cout << " (непростое)\n";
  51.     }
  52.     return 0;
  53. }
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement