离散数学:辗转相除法(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; }
=