最大公約數就是採用常規的輾轉相除法,也就是歐幾里得演算法,其建立的理論依據為:
gcd(a,b)=gcd(b,a%b),其中一定要保證a>b,這裡數學推導不給出;
gcd函式計算兩個數的公約數,然後轉換為a%b和b的公約數計算,這也是一種遞迴,目的在於一直減小數字的規模;
最後使得出現0或者最大公約數都是a;
所以有最大公約數的計算程式碼:
int gcd(int a,int b){
if(b==0)
return a;
else
retrun gcd(b,a%b);
}
而對於最小公倍數,其本質就是建立在最大公約數,
其常常用函式lcm(a,b)表示;
若d為a,b的最大共約束,則最小公倍數為ab/d,為了防止ab運算出現溢位,所以採用a/db的形式:
int lcm(a,b){
return a/gcd(a,b)*b;
}