在这段代码中,我正在尝试使用 OpenMP 并行执行 Sieve of Eratosthenes 算法,当程序是串行的时它工作正常
for (int i = p * p; i <= n; i += p) 素数[i] = false;
但是当我使用
#pragma omp for
它给出了这个错误
错误:无效的控制谓词 17 | for (int p = 2; p * p <= n; p++)
这是代码
#include <bits/stdc++.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <omp.h>
using namespace std;
void SieveOfEratosthenes(int n)
{
#pragma omp parallel
{
bool prime[n + 1];
memset(prime, true, sizeof(prime));
#pragma omp for
for (int p = 2; p * p <= n; p++)
{
if (prime[p] == true)
{
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
#pragma omp critical
for (int p = 2; p <= n; p++)
if (prime[p])
printf("%d ", p);
}
}
int main()
{
printf("Enter the siza: ");
int n ;
scanf("%d", &n);
printf("Following are the prime numbers from 1 to %f \n", sqrt(n));
SieveOfEratosthenes(sqrt(n));
printf("\n");
return 0;
}