循環(huán)取余法
假設(shè)a<b,i為最大公約數(shù)
a = ka*i
b = kb*i
b-a = (kb - ka)*i 則 b-a 也為i倍數(shù),則此時b-a充當(dāng) a 的位置 , a 充當(dāng) b 的位置
用循環(huán)算法如下:
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變?yōu)橛鄶?shù)
a = temp; // a是(a玫鸟,b)中較大的數(shù)
}
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);
}