若想了解歐幾里德算法GCD(求兩個數的最大公約數)請點擊以下鏈接:
http://blog.csdn.net/sand8o8time/article/details/76690342
其實對於求兩個數的最小公倍數和最大公約數的算法一樣,只需要用這兩個數的乘積除以這兩個數的最大公約數就行了即:LCM(a,b) = a * b / GCD(a,b)
因爲最大公約數就兩個數的所有相同質數相乘,最小公倍數就是扣除一次所有想同的質數全部相乘,補過來剛好,所以兩個數的乘積除以他們的最大公約數是最小公倍數即:
假設M = a * b , N = a * c,GCD(M,N)= a ,則LCM(M,N)= a * b * c,
所以A * B=a * b * a * c = a * a * b * c = GCD(A,B) * LCM(A,B)
以下是核心代碼:
int gcd(int a , int b) //遞歸法:歐幾里得算法,計算最大公約數
{
return a==0?b:gcd(b%a,a);
}
int lcm(int a, int b)
{
return a/gcd(a,b)*b; //這裏選擇先除以gcd(a,b)是爲了防止數太大是超過int類型的存儲能力
}