此分配的目的是查找可以由数组中每两个数字形成的对数。条件是这两个数不能具有共同的因素。
我尝试使用数组中的数字进行循环比较,因子循环从2开始。此代码可以工作,但超过了代码解析10个案例中2个的时间限制。
double estimate_PI(int list[], int size) {
int i, pair;
pair = size * (size - 1) / 2; //total number of pairs can be formed
int count = pair;
int j, l;
for (i = 0; i < size; i++) { //check the first number in the array
for (j = i + 1; j < size; j++) { //check compare the first number of the rest
// of the numbers in the array
for (l = 2; l < list[j]; l++) { //check for common factors
if (list[i] % l == 0 && list[j] % l == 0) { //if these two values have common factor
count--; //the possible number of pair reduce by 1
break;
}
}
}
}
// printf("%d\n count",count);
double PI = sqrt(6.0000 * pair / count);
return PI;
}
对于这种方法,代码解码器运行时间过长,并标记为错误。
答案 0 :(得分:0)
也许不去尝试每个值[2...list[j])
,而是寻找Greatest common divisor
示例int gcd(int a, int b)
Arjun Sreedharan或chux
#if 0
for (l = 2; l < list[j]; l++) { //check for common factors
...
}
#else
if (gcd(list[i], list[j]) <= 1) count--;
#endif
可以简化,因为只需要找到第一个因子> 1。