1、穷举法java
/** 穷举法 */ public int gcdExhaustion(int firstNumber, int secondNumber) { int n1 = Math.abs(firstNumber); int n2 = Math.abs(secondNumber); int gcd = 1; for (int i = 1; i <= n1 && i <= n2; i++) { if (0 == n1 % i && 0 == n2 % i) gcd = i; } return gcd; }
2、欧几里德算法算法
定义:假设x%y=r,则x与y的最大公约数等于y与r的最大公约数code
/** 欧几里德算法 (迭代)*/ public int gcdEuclid(int firstNumber, int secondNumber) { int n1 = Math.abs(firstNumber); int n2 = Math.abs(secondNumber); int r = n1 % n2; while(0 != r) { n1 = n2; n2 = r; r = n1 % n2; } return n2; } /** 欧几里德算法(递归) */ public int gcdEuclid2(int firstNumber, int secondNumber) { int n1 = Math.abs(firstNumber); int n2 = Math.abs(secondNumber); int r = n1 % n2; if (0 == r) return n2; return gcdEuclid2(n2, r); }