循环取余法
假设a<b,i为最大公约数
a = ka*i
b = kb*i
b-a = (kb - ka)*i 则 b-a 也为i倍数,则此时b-a充当 a 的位置 , a 充当 b 的位置
用循环算法如下:
public static int f(int m, int n){
int a = m > n ? m:n; // 将m,n中大的值赋予a
int b = m < n ? m:n; // 将m,n中小的值赋予b
while (b > 0){
int temp = b;
b = a%b; // 此时b变为余数
a = temp; // a是(a,b)中较大的数
}
return a;
}
用递归如下:
public static int f(int m,int n){
int a = m > n ? m:n; // 将m,n中大的值赋予a
int b = m < n ? m:n; // 将m,n中小的值赋予b
if( b == 0 ) return a;
return f(a%b,b);
}
网友评论