欧几里得最大的除数算法

时间:2018-10-23 16:39:41

标签: c++ arrays stdev

我是编程新手,正在学习C ++。

我已经使用C ++实现了Euclid最大的除数算法。 algorithm

int main()
{
    int n = 78;
    int m = 52;
    float r = 0;

    while (n != 0) {
        r = m % n;
        m = n;
        n = r;
    }
    cout << m;
}

我现在想修改上面的C ++代码。我想将M更改为{{324,737},N = {68,207,927,87,126,6347,563,178,437}。

我试图确定集合G = {gcd(m,n):m∈M和n∈N}。 对于每对(m,n),我试图计算进入while循环的次数w。然后,我想确定w的平均值及其标准偏差。

我的尝试

int n[9] = { 68, 207, 927, 87, 126, 6347, 563, 178, 437 };
int m[2] = { 324, 737 };
float r = 0;
int w;

while (n != 0){
    int i = 1;
    r = m[i] % n[i];
    m = n;
    n = r;
    i++;

    w++;
}

float average = w / 9;
float stdev = 0.0;
cout << m;

这让我感到困惑。如何更改它以接受数组,然后如何计算和确定w,平均值和STDEV?

1 个答案:

答案 0 :(得分:0)

函数可帮助您将代码(和问题)分成不同的部分。例如,您可以这样做:

int numberOfGcdLoopIterations(int n, int m)
{
  int r = 0;

  int loopCount = 0;

  while (n != 0)
  {
    r = m % n;
    m = n;
    n = r;

    ++loopCount;
  }

  return loopCount;
}

然后,您可以为所需的任何nm调用此函数,并获取相应的w。现在,问题简化为“如何为给定集合中的每对mn调用此函数”和“如何计算返回值的平均值和标准偏差”。您应该可以从这里解决这些问题。

相关问题