deced

Untitled

Oct 26th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5. bool isMersennePrime(int mersennePrime, int exponent)
  6. {
  7.     bool isPrime = false;
  8.     long long int s = 4;
  9.     for (int i = 2; i < exponent; i++)
  10.     {
  11.         s = ((s * s) - 2) % mersennePrime;
  12.     }
  13.     if ((s == 0) || (mersennePrime == 3))
  14.     {
  15.         isPrime = true;
  16.     }
  17.     return isPrime;
  18. }
  19.  
  20. unsigned int getN()
  21. {
  22.     bool isIncorrect;
  23.     unsigned int ret = 0;
  24.     string inputLine;
  25.     do
  26.     {
  27.         isIncorrect = false;
  28.         cout << "Введите N" << endl;
  29.         getline(cin, inputLine);
  30.         try
  31.         {
  32.             ret = stoul(inputLine);
  33.         }
  34.         catch (...)
  35.         {
  36.             cout << "N должно быть положительным числом меньшим " << UINT32_MAX << endl;
  37.             isIncorrect = true;
  38.         }
  39.     } while (isIncorrect);
  40.     return ret;
  41. }
  42. void printArray(vector<int> arrayToPrint)
  43. {
  44.     cout << "Числа мерсена равны" << endl;
  45.     for (int i = 0; i < arrayToPrint.size(); i++)
  46.     {
  47.         cout << arrayToPrint[i] << endl;
  48.     }
  49. }
  50. vector<int> getPrimes()
  51. {
  52.     const int p = 32;
  53.     vector<int> primes;
  54.     for (int i = 0; i < p; i++)
  55.         primes.push_back(i + 1);
  56.     for (int i = 1; i < primes.size(); i++)
  57.         if (primes[i] != 0)
  58.             for (int j = i + 1; j < primes.size(); j++)
  59.                 if (primes[j] % primes[i] == 0)
  60.                     primes.erase(primes.begin() + j);
  61.     return primes;
  62. }
  63. void GetMersennePrimes()
  64. {
  65.     unsigned int n;
  66.     int mersennePrime;
  67.     n = getN();
  68.     vector<int> primes = getPrimes();
  69.     vector<int> mersennePrimes;
  70.     for (int i = 0; i < primes.size(); i++)
  71.     {
  72.         mersennePrime = (1 << primes[i]) - 1;
  73.         if (isMersennePrime(mersennePrime, primes[i]) && n > mersennePrime)
  74.         {
  75.             mersennePrimes.push_back(mersennePrime);
  76.         }
  77.     }
  78.     printArray(mersennePrimes);
  79. }
  80. int main()
  81. {
  82.     setlocale(LC_ALL, "Russian");
  83.     GetMersennePrimes();
  84. }
  85.  
Add Comment
Please, Sign In to add comment