Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // проверка гипотезы Гольдбаха, что любое четное число n >= 4 можно представить в виде суммы двух простых чисел
- #include <iostream> // std::cout
- #include <numeric> // std::iota
- #include <algorithm> // std::remove_if
- #include <vector> // std::vector
- using namespace std;
- int main ()
- {
- // задаём размер числового отрезка
- const auto N = 30;
- // генерируем последовательность 2 3 4 5... N
- vector<int> primes( N );
- iota( primes.begin(), primes.end(), 2 );
- // при помощи решета Эратосфена оставляем в последовательности только простые числа
- for (auto n = 0; n < primes.size(); n++)
- primes.erase(
- remove_if(
- primes.begin()+n+1,
- primes.end(),
- [=](int i){return !(i%primes[n]);}
- ),
- primes.end()
- );
- // с помощью полученной последовательности ищем разложение четных чисел в сумму двух простых
- for (auto n = 4; n <= N; n += 2)
- for (int k = 0, s = primes.size(), kL = s*s; k < kL; k++)
- if ( n == primes[k%s] + primes[k/s] )
- {
- cout << n << " = " << primes[k%s] << " + " << primes[k/s] << endl;
- break;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment