离散数学:辗转相除法(Euclidean Algorithm)
#include <stdio.h>
#include "stdafx.h"
int gcd(int x, int y) //定义用于求两数的最大公约数的函数,函数只管求值,不管输出。输出由main完成
{
if (x < y)
{
int m;
m = x;
x = y;
y = m;
}
while (x%y != 0)//Euclidean Algorithm: if a = bq + r , then gcd(a, b) == gcd(b, r)
{
int a, b;
a = x;
b = y;
x = b;
y = a % b;
gcd(x, y);
}
return y;
}
int gcds(int x, int y, int z, int w) //调用gcd()求四数的最大公约数
{
return gcd(gcd(x, y), gcd(z, w));
}
int main()
{
int a, b, c, d, g;
scanf_s("%d %d %d %d", &a, &b, &c, &d);
g = gcds(a, b, c, d);
printf("最大公约数是:%d\n", g);
return 0;
}
=