Вычисление наибольшего общего делителя двух произвольных положительных целых чисел. Написал код, но мне кажется он получился большой

#include <cstdlib>
using namespace std;
int main()
  {
    system("chcp 1251>nul");
    int a=0, s1, s2;
    int c1 = 0, c2 = 0;
    int num1[10];
    int num2[10];   
    for (int i = 0; i < 10; i++)
    {
        num1[i] = 0;
        num2[i] = 0;
    }
// создание 1 массива
    cin >> s1;
    for (int i = 1; i <= s1; i++)
    {
        if (!(s1 % i))
        {
            cout << i << " ";
            num1[c1] = i;
            c1++;
        }
    }
//сортировка 1 массива пузырьком
    for (int i = 1,s=0; i <= 9; i++)
    {
        for (int j = 0; j < 10-i; j++)
        {
            if (num1[j] > num1[j+1])
            {
                s = num1[j+1];
                num1[j+1] = num1[j];
                num1[j] = s;
            }
        }
    }
    cout << endl;
// создание 2 массива
    cin >> s2;
    for (int i = 1; i <= s2; i++)
    {
        if (!(s2 % i))
        {
            cout << i << " ";
            num2[c2] = i;
            c2++;
        }
    }
//сортировка 2 массива пузырьком
    for (int i = 1, s = 0; i <= 9; i++)
    {
        for (int j = 0; j < 10 - i; j++)
        {
            if (num2[j] > num2[j + 1])
            {
                s = num2[j + 1];
                num2[j + 1] = num2[j];
                num2[j] = s;
            }
        }
    }
    cout << endl;
// Поиск наибольшего общего делителя
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (num1[i] == num2[j])
            {
                if (a < num1[i]);
                {
                    a = num1[i];
                }
            }
        }
    }
    cout << "Наибольший общий делитель "<< a << endl;

    system("pause>nul");
    return 0;
}```

Ответы (1 шт):

Автор решения: Miracle-

Может Вам понравится такая реализация,через swap()? Код:

std::uint32_t GCD(std::uint32_t a, std::uint32_t b) {
    if (a == b) return a;

    if ((a == 0 || b == 0) && (a > 0 || b > 0)) {
        if (a > 0) return a;
        else return b;
    }

    if (a < b) {
        std::swap(a, b);
    }

    while (a % b != 0) {
        a = a % b;
        std::swap(a, b);
    }
    return b;
}

Либо:

#include <numeric>
std::cout<<std::gcd(a,b);
→ Ссылка