还是老规矩直接讲解原理 辗转相除法 优点是可以求出两个大数的最大公因数 如果我们要求8251与6105的最大公因数的话假设8251是这个数x的a倍,再假设6105是x的b倍那么2146=8251-6105,是x的(a-b)倍,也是x的倍数而无论这几个数如何加减,甚至相乘,都还是最大公约数的倍数我们就可以把求8251与6105的最大公约数简化成求2146和6105的最大公约数,再把求2146与6105的最大公约数简化为求3959(=6105-2146)与2146的最大公约数如此相减往复几次后,会发现两个数变相等了,这个数就是两个原来数的最大公因数举个例子9和69-6=3,保留6,36-3=3,保留3,3发现两数相等,为3所以最大公因数为3 #include <stdio.h> int gcd(int a, int b) { if(b==0) return a; else return gcd(b,a%b);//return b?gcd(b,a-b):a; } int main() { int a, b; while(~scanf("%d%d", &a, &b)) { int g = gcd(a,b); printf("%d\n", g); } return 0; }