ms_shnits

Гипотеза Гольдбаха (30 = 23 + 7)

Sep 29th, 2021 (edited)
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. // проверка гипотезы Гольдбаха, что любое четное число n >= 4 можно представить в виде суммы двух простых чисел
  2.  
  3. #include <iostream>     // std::cout
  4. #include <numeric>      // std::iota
  5. #include <algorithm>    // std::remove_if
  6. #include <vector>       // std::vector
  7.  
  8. using namespace std;
  9.  
  10. int main ()
  11. {
  12.  
  13.     // задаём размер числового отрезка
  14.     const auto N = 30;
  15.    
  16.     // генерируем последовательность 2 3 4 5... N
  17.     vector<int> primes( N );
  18.     iota( primes.begin(), primes.end(), 2 );
  19.    
  20.     // при помощи решета Эратосфена оставляем в последовательности только простые числа
  21.     for (auto n = 0; n < primes.size(); n++)
  22.         primes.erase(
  23.             remove_if(
  24.                 primes.begin()+n+1,
  25.                 primes.end(),
  26.                 [=](int i){return !(i%primes[n]);}
  27.                 ),
  28.             primes.end()
  29.             );
  30.    
  31.     // с помощью полученной последовательности ищем разложение четных чисел в сумму двух простых
  32.     for (auto n = 4; n <= N; n += 2)
  33.         for (int k = 0, s = primes.size(), kL = s*s; k < kL; k++)
  34.             if ( n == primes[k%s] + primes[k/s] )
  35.             {
  36.                 cout << n << " = " << primes[k%s] << " + " << primes[k/s] << endl;
  37.                 break;
  38.             }
  39.  
  40.     return 0;
  41. }
  42.  
Add Comment
Please, Sign In to add comment