求最大公因数的简单方法
欧几里得算法
1. 算法思路
求解两个正整数(M,N,M<N)的最大公因数最明显的算法是循环遍历从2到M,判断是否可以同时整除M和N,若可以,暂存到最大公因数变量(初始为1),之后返回该变量。代码略。
该算法的复杂度为O(N),当两个数很大且很接近时,此算法会很耗时、很低效,今天翻看算法书,学到一个欧几里得算法,算法复杂度为O(logN),且在处理两个很相近的大数时很高效。
算法思想:若大数除以小数余数为0,则最大公因数为小数,否则最大公因数是小数和余数的最大公因数
2. 代码实现
/** * 欧几里得算法实现 * @param m 大数 * @param n 小数 * @return 最大公因数 */ public long gcd(long m, long n) { while (n != 0) { long rem = m % n; m = n; n = rem; } return m; }
3. 扩展说明
当碰到需要使用算法求解时,经常会用到一些对数思路去优化算法,如:有序数组的折半查询,欧几里得算法等,可以将算法的复杂度降低到O(logN)