#include "task_3.h" #include "mayer_primes.h" #include "timing.h" #include #include #include #include #include using namespace std; int single_goldbach_par(int k) { const vector primes = get_primes(k); int count = 0; #pragma omp parallel for reduction(+:count) for (size_t i = 0; i < primes.size(); i++) { for (size_t j = i; j < primes.size(); j++) { if (primes[i] + primes[j] == k) { count++; } } } return count; } vector count_goldbach_par(int n) { const vector primes = get_primes(n); vector counts(n+1); #pragma omp parallel reduction(VecAdd:counts) // #pragma omp parallel { vector local_counts(n+1, 0); #pragma omp for for (size_t i = 1; i < primes.size(); i++) { for (size_t j = i; j < primes.size(); j++) { int sum = primes[i] + primes[j]; if (sum <= n) { local_counts[sum]++; } } } counts += local_counts; // #pragma omp critical // { // for(int k=0; k primes = get_primes(k); cout << "\nDecompositions for k = " << k << ": "; for (size_t i = 0; i < primes.size(); i++) { for (size_t j = i; j < primes.size(); j++) { if (primes[i] + primes[j] == k) { cout << primes[i] << " + " << primes[j] << ", "; } } } cout << endl; }