parallel-programming/1/openmp/linux/zadanie1_Linux_Remastered (...

174 lines
1.5 KiB
C++

#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <omp.h>
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main() {
long long int low_lim = 10000000000LL; // 1 миллиард
long long int up_lim = 100000000000LL; // 100 миллиардов
long long int new_low_lim = pow(low_lim, 1.0 / 4.0);
long long int new_up_lim = pow(up_lim, 1.0 / 4.0);
std::vector<long long int> primes;
#pragma omp parallel for
for (long long int i = new_low_lim; i <= new_up_lim; i++) {
long long int number = pow(i, 4);
#pragma omp critical
{
if (number >= low_lim && number <= up_lim && is_prime(i)) {
primes.push_back(number);
}
}
}
std::ofstream output_file("/home/danila/zadanie1openmp.txt");
if (output_file.is_open()) {
for (const auto& prime_power : primes) {
output_file << prime_power << std::endl;
}
output_file.close();
std::cout << "Результаты записаны в файл result.txt на рабочем столе." << std::endl;
}
else {
std::cerr << "Ошибка открытия файла для записи." << std::endl;
}
return 0;
}
// Любопытный, да?