Найти НОД нескольких целых чисел - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Необходимо найти НОД n целых чисел ki, где i=1..n. Всем привет помогите написать программу.сПАСИБО

Решение задачи: «Найти НОД нескольких целых чисел»

textual
Листинг программы
#include <stdio.h>
 
int gcd(int a, int b) {
  return b == 0 ? a : gcd(b, a % b);
}
 
int gcd_nth (int * ptr, int n, int result) {
  return n == 0 ? result : gcd_nth(ptr + 1, n - 1, gcd(result, *ptr));
}
 
int main (void)
{
  int a[] = {12,  6, 15, 18};
  int b[] = {27,  18, 9};
  
  printf("%i\n", gcd_nth(a + 1, 3, a[0]));
  printf("%i\n", gcd_nth(b + 1, 2, b[0]));
  
  return 0;
}

Объяснение кода листинга программы

  1. Включаем стандартную библиотеку ввода-вывода
  2. Определяем функцию gcd(a, b), которая находит НОД двух целых чисел
  3. Используем рекурсию для нахождения НОД двух чисел
  4. Если b равно 0, то возвращаем a, иначе вызываем функцию gcd для чисел b и a mod b
  5. Определяем функцию gcd_nth(ptr, n, result), которая находит НОД первого n чисел в массиве ptr и сохраняет результат в переменной result
  6. Если n равно 0, то возвращаем result, иначе вызываем функцию gcd_nth для ptr + 1, n - 1 и результата gcd(result, *ptr)
  7. В функции main создаем два массива a и b и инициализируем их значениями 12, 6, 15, 18 и 27, 18, 9 соответственно
  8. Вызываем функцию gcd_nth(a + 1, 3, a[0]) и выводим результат на экран
  9. Вызываем функцию gcd_nth(b + 1, 2, b[0]) и выводим результат на экран
  10. Возвращаем 0, завершая работу программы

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы