Алгоритм наибольшего общего делителя Евклида - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в программировании и изучаю C ++.

Я реализовал алгоритм наибольшего общего делителя Евклида, используя C ++.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) я пытаюсь подсчитать число w раз, когда вводится цикл while.Затем я хочу определить среднее значение 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 голосов
/ 23 октября 2018

Функции помогают вам структурировать ваш код (и проблему) на отдельные части.Например, вы можете сделать это:

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;
}

Затем вы можете вызвать эту функцию для любых n и m, которые вы хотите, и получить соответствующий w.Теперь вопрос сводится к тому, «как вызвать эту функцию для каждой пары m и n из заданных наборов» и «как рассчитать среднее и стандартное отклонение возвращаемых значений».Вы должны быть в состоянии решить это отсюда.

...