【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++—程式和程式語言C語言C++
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- python用輾轉相除法求最大公約數Python
- 輾轉相除法求最大公約數——[js練習]JS
- 漫畫演算法:輾轉相除法是什麼鬼?演算法
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- (C語言) int型之間除法運算,向零取整C語言
- c語言檔案操作相關C語言
- C++除法運算 // 靜態斷言C++
- C語言萌新上手:相鄰數對C語言
- C++語言概述 (轉)C++
- 聊聊 C 語言和 ABAP 這兩門程式語言的關係
- C語言---整型字串轉換C語言字串
- c語言函式庫(轉)C語言函式
- 聊聊C語言和ABAPC語言
- 歐幾里德演算法(又稱輾轉相除法)求最大公約數,以及最小公倍數演算法
- C語言相關的基礎字串函式C語言字串函式
- 資料結構C語言|佇列相關資料結構C語言佇列
- C語言 C語言野指標C語言指標
- C語言---“C語言 誰與爭鋒?”C語言
- C語言動態呼叫庫(轉)C語言
- C語言連線Oracle (轉載)C語言Oracle
- c語言字串,數字轉換C語言字串
- C 語言程式設計(unix) (轉)程式設計
- C 語言常見問題(轉)
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- Java語言和C++語言的差異 (轉)JavaC++
- C語言C語言
- C語言學習資料(轉載)C語言
- C語言程式書寫規範 (轉)C語言