輾轉相除法的原理
輾轉相除法是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,那麼最後的除數就是這兩個數的最大公約數。這個和更相減損術有著異曲同工之處。
原理:
首先介紹下更相減損術的原理,假設有兩個數161和63,我們要求這兩個數的最大公因數,不妨假定這個最大公因數為m,我們可以將較大的數161看成63+98,63與98的和161可以被m整除,其中63也可以被m整除,自然98可以被m整除;
所以這個問題就轉換為求98和63的最大公因數m(和上面m相等)
將98看成63+35,其中63可以被m整除,和98也能被m整除,故35也可以被m整除;
所以問題進一步轉換為求35和63的最大公因數m(和上面m相等)
同理轉換為求 (63-35)=>28和35 的最大公因數
然後轉換為求28和7的最大公因數
…(一直減呀減)
後來轉換為求7和7的最大公因數
最後轉換為求7和0的最大公因數
輸出第一個數字即可;這就是相減損術的原理
我們發現求28和7的最大公約數,一直減7,一直減7…減到不能減為止。這個不斷減7的過程就是除7求餘數(即%7)
這樣我們可以將相減損術優化成輾轉相除法,上面給出了思考過程,有興趣可以百度嚴謹的證明過程。
c語言程式碼如下:
#include<stdio.h>
int gcd(int a, int b) {
int t;
while(b!=0) {
t=a%b;
a=b;
b=t;
}
return a;
}
int main() {
int a,b;
scanf("%d%d",&a,&b);
printf("gcd=%d\n",gcd(a,b));
return 0;
}
同理計算最小公倍數:只要用這兩個數的乘積除以最大公因數即可
printf(“lcm=%d\n”,a*b/gcd(a,b))
相關文章
- 輾轉相除法原理
- 輾轉相除法原理解析
- C++中的輾轉相除法C++
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- 透徹理解輾轉相除法
- 輾轉相除法 氣泡排序排序
- 【C語言】聊聊輾轉相除法C語言
- 【演算法分析與設計】輾轉相除法演算法
- python用輾轉相除法求最大公約數Python
- 輾轉相除法求最大公約數——[js練習]JS
- 漫畫演算法:輾轉相除法是什麼鬼?演算法
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- C語言第七篇:輾轉相除法求最大公約數C語言
- 歐幾里德演算法(又稱輾轉相除法)求最大公約數,以及最小公倍數演算法
- 除法與GCD演算法的相關分析GC演算法
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- 相機工作原理
- 相機成像原理
- CBO的相關原理 系列一
- Oracle Exam的排除法Oracle
- Elasticsearch——document相關原理Elasticsearch
- scss不能用除法?CSS
- JavaScript / 除法運算子JavaScript
- MySQL 除法問題MySql
- (轉)WebSocket的原理Web
- ASEMI三相整流橋的工作原理
- 【leetcode】29. Divide Two Integers 不能使用乘除法的整數除法LeetCodeIDE
- Webpack相關原理淺析Web
- vue原理相關總結Vue
- 手工實現整除除法的比較
- [轉帖]基礎篇:JVM調優原理相關的知識和經驗分享JVM
- 背部痘痘特效去除法特效
- IE相關的API (轉)API
- Oracle Freelist和HWM原理探討及相關效能優化(轉)Oracle優化
- excel除法公式怎麼輸入 excel除法函式怎麼輸入Excel公式函式
- 轉移指令的原理
- android kotlin 安全除法AndroidKotlin
- Squid 工作的原理(轉)UI