Вычисление наибольшего общего делителя двух произвольных положительных целых чисел. Написал код, но мне кажется он получился большой
#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);