方法一:暴力枚举法
#includeint gcd(int a, int b) { int min = (a < b) ? a : b; int max = (a > b) ? a : b; for (int i = min; i >= 1; i--) { if (min % i == 0 && max % i == 0) { return i; } } return 1; } int main() { int a, b; printf("请输入两个数:"); scanf("%d %d", &a, &b); printf("最大公约数为:%d\n", gcd(a, b)); return 0; }
方法二:辗转相除法
#includeint gcd(int a, int b) { while (b != 0) { int temp = a % b; a = b; b = temp; } return a; } int main() { int a, b; printf("请输入两个数:"); scanf("%d %d", &a, &b); printf("最大公约数为:%d\n", gcd(a, b)); return 0; }
方法三:更相减损法
#includeint gcd(int a, int b) { if (a == b) { return a; } int max = (a > b) ? a : b; int min = (a < b) ? a : b; return gcd(max - min, min); } int main() { int a, b; printf("请输入两个数:"); scanf("%d %d", &a, &b); printf("最大公约数为:%d\n", gcd(a, b)); return 0; }