我试图并行化代码以使用openmp获得第一个“ n”素数,但是我意识到我重复得到了相同的数。我试图将变量设为私有,但是问题是每个线程都以相同的数字开头,所以我不知道是否有任何方法可以延迟线程,因此每个线程都以不同的数字开头。这是我设法执行的代码:
#include <stdio.h>
#include <omp.h>
void qs(int lista[],int limite_izq,int limite_der)
{
int izq,der,temporal,pivote;
izq=limite_izq;
der = limite_der;
pivote = lista[(izq+der)/2];
do{
while(lista[izq]<pivote && izq<limite_der)izq++;
while(pivote<lista[der] && der > limite_izq)der--;
if(izq <=der)
{
temporal= lista[izq];
lista[izq]=lista[der];
lista[der]=temporal;
izq++;
der--;
}
}while(izq<=der);
if(limite_izq<der){qs(lista,limite_izq,der);}
if(limite_der>izq){qs(lista,izq,limite_der);}
}
void quicksort(int lista[],int n)
{
qs(lista,0,n-1);
}
int main() {
int n_total_primes = 10, n = n_total_primes;
int i=3;
int aux = 0;
int vector[n_total_primes];
double t1 = omp_get_wtime();
omp_set_num_threads(4);
#pragma omp parallel for
for (n = 1; n < n_total_primes; n++) {
for (aux = 2; aux < i; aux++) {
if (i % aux == 0) {
aux = i;
}
}
if (i == aux) {
vector[n] = i;
n++;
}
i++;
n--;
}
vector[0] = 2;
double t2 = omp_get_wtime();
printf("Total time: %lf\n", t2-t1);
quicksort(vector,n_total_primes);
for ( i = 0 ; i < n_total_primes ; i++ )
printf("%d\n",vector[i]);
printf("\nnum_primes=%d, last prime: %d\n", n_total_primes, vector[n_total_primes-1]);
return 0;
}