歐幾里德演算法(又稱輾轉相除法)求最大公約數,以及最小公倍數
歐幾里德演算法就是求兩數的最大公約數的一種演算法。
設兩數為a和b,則其最大公約數為c = gcd(a,b) = gcd(b,a%b)。
證明:
設a = k*b + r,則r = a - k*b,且r = a%b。
易知,a%c == b%c == 0。
r % c == (a - k*b)%c == a%c - k*b%c == 0。
所以,b,r的最大公約數是c。
顯然易得,gcd(a,b) = gcd(b,a%b)。
通過迴圈,直到b == 0 時返回a即可(因為0和a的最大公約數便是a本身)
以下是遞迴程式碼:
int gcd(int a,int b)
{
if(b == 0) return a;
return gcd(b,a%b);
}
以下是迭代程式碼:int gcd(int a,int b)
{
while(b)
{
a = a % b;
swap(a,b);
}
return a;
}
附上個最小公倍數求法,其公式是
最小公倍數 = 兩個數的乘積 / 最大公倍數
附上程式碼:
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
相關文章
- python用輾轉相除法求最大公約數Python
- 輾轉相除法求最大公約數——[js練習]JS
- 最大公約數與最小公倍數演算法演算法
- 最大公約數和最小公倍數
- C語言第七篇:輾轉相除法求最大公約數C語言
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- C語言 用更相減損術求最大公約數,最小公倍數C語言
- 求多個數最大公約數、最小公倍數的一種變換演算法演算法
- C++:最小公倍數與最大公約數C++
- python語言程式設計——求最大公約數和最小公倍數演算法Python程式設計演算法
- 最大公約數和最小公倍數--java實現Java
- 求兩個正整數的最大公約數與最小公倍數--C#實現C#
- linux C(hello world)最大公約數和最小公倍數Linux
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- java演算法 求最大公約數Java演算法
- Python求最小公倍數Python
- NumPy 差分、最小公倍數、最大公約數、三角函式詳解函式
- 【shell 指令碼】求最大公約數指令碼
- java求最小公倍數(親測秒懂)Java
- 輾轉相除法原理
- 最大公約數的演算法演算法
- 演算法設計與分析:求兩個自然數的最大公約數演算法
- 輾轉相除法的原理
- 【演算法分析與設計】輾轉相除法演算法
- 杭電OJ 2028求n個數的最小公倍數
- 【演算法拾遺】最大公約數演算法
- 最大公約數與歐幾里得演算法演算法
- 洛谷P1029 [NOIP2001 普及組] 最大公約數和最小公倍數問題
- 透徹理解輾轉相除法
- 輾轉相除法 氣泡排序排序
- 輾轉相除法原理解析
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- 最大公約數GCDGC
- 漫畫演算法:輾轉相除法是什麼鬼?演算法
- C++中的輾轉相除法C++
- 【C語言】聊聊輾轉相除法C語言
- C. 最大公約數
- 最長公共子序列求方案數