因此,没有休息就无法划分的因素 另一个int数-我们可以为它添加一个迭代器,但我们 不知道素数的形式。而且我认为我仍然是 学生对此。我在并行化中发布了代码, 没有。它只是没有;)而工作,我不得不重写 代码,因为没有副本!
我认为使用break标志继续替换break命令是 错误,并且在for循环中发现无效谓词, 唯一允许的条件是一个简单的条件,包括 迭代变量-如果您能解决这个问题,那就大了!
#include <iostream>
#include <vector>
#include "omp.h"
using namespace std;
double MAX_VAL = 999999.0;
double v2 = MAX_VAL;
double rgcd(double v1) {
#pragma omp parallel
{
int i = 0;
int flag = 1;
if((int) v1 == (int) v2) {
v2 -= 1.0;
}
#pragma omp parallel for
for(int i = 0; i < (int) MAX_VAL; i++) {
if(((int) v1 % (int) v2 != 0 && (int) v1 != (int) v2)) {
v2 -= 1.0;
if((int) v2 < 2) {
flag = 0;
if(flag) continue;
}
if((int) v1 == (int) v2) {
v2 -= 1.0;
}
if((int) v1 % (int) v2 == 0) {
#pragma omp parallel for
for(int i = 0; i < (int) MAX_VAL; i++) {
if(((int) v1 % (int) v2 == 0)) {
v1 /= v2;
if((int) v1 < 2 || (int) v2 < 2) {
flag = 0;
if(flag) continue;
}
flag = 0;
if(flag) continue;
}
}
}
}
}
}
return v1;
}
double &get_val(vector<double> &vi, int ix ) {
return vi[ix];
}
int main() {
#pragma omp parallel
{
int i = (int) MAX_VAL;
int ai[(int) MAX_VAL];
for(i = (int) MAX_VAL; i >= 0; i--) {
ai[i] = (double) i;
}
vector<double> vec2(ai, ai+((int)MAX_VAL));
#pragma omp parallel for
for(i = (int) MAX_VAL; i >= 0; i--) {
v2 = MAX_VAL;
if(i == (int) rgcd(get_val(vec2, i)++)) {
cout << i << endl;
}
}
}
return 0;
}
///////////////////////////////////////////////////////////////
#include <iostream>
#include <vector>
using namespace std;
double MAX_VAL = 999999.0;
double v2 = MAX_VAL;
double rgcd(double v1) {
if((int) v1 == (int) v2) {
v2 -= 1.0;
}
while(((int) v1 % (int) v2 != 0 && (int) v1 != (int) v2)) {
v2 -= 1.0;
if((int) v2 < 2) {
break;
}
if((int) v1 == (int) v2) {
v2 -= 1.0;
}
if((int) v1 % (int) v2 == 0) {
while(((int) v1 % (int) v2 == 0)) {
v1 /= v2;
if((int) v1 < 2 || (int) v2 < 2) {
break;
}
}
break;
}
}
return v1;
}
double &get_val(vector<double> &vi, int ix ) {
return vi[ix];
}
int main() {
int i = (int) MAX_VAL;
int ai[(int) MAX_VAL];
for(i = (int) MAX_VAL; i >= 0; i--) {
ai[i] = (double) i;
}
vector<double> vec2(ai, ai+((int)MAX_VAL));
for(i = (int) MAX_VAL; i >= 0; i--) {
v2 = MAX_VAL;
if(i == (int) rgcd(get_val(vec2, i)++)) {
cout << i << endl;
}
}
return 0;
}
新方法有效,但我无法折叠循环
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#define MAX_CALC 40
int isPrime(int number);
int power(int val, int power);
int main() {
#pragma omp parallel
{
int p[2];
int ctr = 0;
int ctr2 = 0;
int it_m = 0;
int it_1 = 0;
int it_2 = 0;
int it_c = 0;
int index = 3;
srand(time(NULL));
double t = clock();
double s = clock();
int prime = 2;
FILE *file;
file = fopen("ly_prime.txt", "w");
//f_power(2.0, 57885161)
#pragma omp parallel for
for (it_m = 2; it_m <= 2000; it_m++) {
ctr2 = 0;
it_c = it_m;
for (it_1 = it_m; it_1 >= 2; it_1--) {
for (it_2 = it_1; it_2 >= 2; it_2--) {
if (it_1 * it_2 - it_c == 0) {
p[ctr % 2] = it_c;
if (ctr >= 1 && p[ctr % 2] - p[(ctr - 1) % 2] == 2) {
//prime[0] = (p[ctr % 2] - 1);
prime = (p[ctr % 2] - 1);
fprintf(stdout, "|%d _ i: %d _ %d\n", isPrime(prime),index, prime);
index++;
}
ctr++;
}
}
}
}
t = clock() - t;
fprintf(file, "|%d_ %d_ %d ", prime, index - 2, ctr);
}
return 0;
}
double f_power(double val, int exp) {
int i = 0;
double help = val;
for(i = 1; i < exp; i++) {
val *= help;
}
return val;
}
int isPrime(int number)
{
int val = 0;
int flag = 1;
int i = 2;
#pragma omp parallel for
for(i=2; i < number; i++)
{
int leftOver=(number % i);
if (leftOver==0)
{
val = 1;
flag = 0;
if(flag) continue;
}
}
return val;
}