Java中求最大公约数
1. 穷举法则 选取两个树中的最小值,小数依次递减,直达两个都树都整除于该树,则为最大公约数。 时间复杂度高,一直递减计算; public static int commonDivisor(int a,int b){ int min = a < b ? a : b; for(int i=min;i>0;i--){ if(a%i == 0 && b%i == 0){ return i; } } return 1; } 2. 辗转相除法 又称欧几里德算法,用较大树除以较小数,再用出现的余数去除除数,再用出现的第二余数去除第一余数,直到最后余数是0为止,最后的除数就是最大公约数。 时间复杂度低,呈指数递减。 欧几里德公式:gcd(a, b) = gcd(b, a mod b) //辗转相除法 public static int commonDivisor2(int a,int b){ int min = a < b ? a : b; int max = a > b ? a : b; int temp; while(max % min != 0){ //min保存余数,max更新为min temp = max % min; max = min; min = temp; } return min; } 来源: CSDN 作者: DuMarch 链接: https://blog.csdn