1.普通法
我可以从大到小枚举 a 的约数,然后再判断它是不是 b 的约数,就能找到最大的那个满足条件的约数,就是所求 gcd 了
int gcd(int a, int b) { int i; for(i = a; i >= 2; --i) {//从大到小,才能保证最大公约数 if(a % i == 0 && b % i == 0) return i; } return 1; }
2. 辗转相除法求最大公约数
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数int gcd(int a, int b){ if(b==0){ return a; } else{ return gcd(b,a%b); }
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }