【C語言】聊聊輾轉相除法
輾轉相除法,又名歐幾里德演算法。
用於計算兩數最大公約數(gcd)
主要思想是:gcd(a,b)=gcd(b,a%b) (a>=b)
原理證明也很簡單:
先不妨設a=kb+r,a=cx,b=cy(c為最大公約數,也即x和y已無公因式)
r=a-kb=c(x-ky)=>說明c是約數,那麼只需證明c是最大的公約數,也即x-ky和y無公因式即可
這裡的證明採用反證法
假設x-ky=md,y=nd (d>1)
則x=md+ky=md+knd=d(m+kn)
a=cx=(m+kn)cd,b=cy=ncd =>a與b存在一個公約數cd>c
與c是a與b的最大公約數矛盾
也即結論錯誤,二者無公因式
QED
那麼清楚原理後,程式碼實現就很簡單了
你可以寫成遞迴的
int gcd(int a,int b)
{
return a%b?gcd(b,a%b):b;
}
也可以寫成迴圈的
int gcd(int a,int b)
{
while(b!=0)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
相關文章
- C++中的輾轉相除法C++
- 輾轉相除法
- 輾轉相除法原理
- 輾轉相除法的原理
- 證明:輾轉相除法與更相減損術
- 輾轉相除法 氣泡排序排序
- 輾轉相除法原理解析
- 透徹理解輾轉相除法
- 輾轉相除法與更相減損術(求最大公約數)
- 求最大公約數(輾轉相除法)
- 聊聊C語言/C++—程式和程式語言C語言C++
- 【演算法分析與設計】輾轉相除法演算法
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- (C語言) int型之間除法運算,向零取整C語言
- 聊聊 C 語言和 ABAP 這兩門程式語言的關係
- C++除法運算 // 靜態斷言C++
- C語言萌新上手:相鄰數對C語言
- 資料結構C語言|佇列相關資料結構C語言佇列
- C語言相關的基礎字串函式C語言字串函式
- 聊聊C語言和ABAPC語言
- C語言的隱式型別轉換C語言型別
- C語言進位制轉換與列印C語言
- C語言C語言
- 【轉載】C 語言有什麼奇技淫巧
- 本文幫你在 Unix 下玩轉 C 語言
- [待更新]歐幾里得演算法(輾轉相除法)與擴充歐幾里得演算法演算法
- C語言字串C語言字串
- C語言(一)C語言
- C語言: returnC語言
- C語言 typedefC語言
- C語言與嵌入式C語言的區別C語言
- C語言學習方法,怎麼學習C語言?C語言
- 零基礎轉行嵌入式——C語言C語言
- c語言字串與整形,浮點數...相互轉換C語言字串
- C語言型別轉換大學霸IT達人C語言型別
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- go語言與c語言的相互呼叫GoC語言