省时的方法来检查数组中的数字是否具有公因子?

时间:2019-03-30 13:29:32

标签: c arrays greatest-common-divisor

此分配的目的是查找可以由数组中每两个数字形成的对数。条件是这两个数不能具有共同的因素。

我尝试使用数组中的数字进行循环比较,因子循环从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;
}

对于这种方法,代码解码器运行时间过长,并标记为错误。

1 个答案:

答案 0 :(得分:0)

也许不去尝试每个值[2...list[j]),而是寻找Greatest common divisor

示例int gcd(int a, int b) Arjun Sreedharanchux

#if 0
  for (l = 2; l < list[j]; l++) {           //check for common factors
    ...
  }
#else
  if (gcd(list[i], list[j]) <= 1) count--;
#endif

可以简化,因为只需要找到第一个因子> 1。