1.题目
2.方法
(1)暴力枚举法
// 暴力枚举法public static int findDivisor(int a, int b) {if (a == b) {return a;}int big = a > b ? a : b;int small = a < b ? a : b;for (int i = small / 2; i > 0; i--) {if (big % i == 0 && small % i == 0) {return i;}}return 1;}
(2)辗转相除法
(3)中国的更相减损术
//更相减损术public int findDivisor(int a, int b) {if (a == b) {return a;}int big = a > b ? a : b;int small = a < b ? a : b;if ((a & 1) == 0 && (b &1) == 0) {return findDivisor(a >> 1, b >> 1) << 1;} else if ((a & 1) == 0 && (b &1) != 0) {return findDivisor(a >> 1, b);} else if ((a & 1) != 0 && (b &1) == 0) {return findDivisor(a, b >> 1);} else {return findDivisor(big - small, small);}}
