輾轉相除法原理
輾轉相除法原理:
假設有兩個數x和y,存在一個最大公約數z=(x,y),即x和y都有公因數z,
那麼x一定能被z整除,y也一定能被z整除,所以x和y的線性組合mx±ny也一定能被z整除。(m和n可取任意整數)
對於輾轉相除法來說,思路就是:若x>y,設x/y=n餘c,則x能表示成x=ny+c的形式,將ny移到左邊就是x-ny=c,由於一般形式的mx±ny能被z整除,所以等號左邊的x-ny(作為mx±ny的一個特例)就能被z整除,即x除y的餘數c也能被z整除。
(以上為複製)
若不能整除,則將min{x,y}作為被除數,餘數c作為除數,繼續迴圈這個過程,直到餘數c=0為止。為什麼這樣做可以得到結果?因為在這個過程中,被除數和除數最大公約數始終沒有變。分析如下:
設商為f,假設第十一步得到了結果,迴圈過程:
x/y=f1…c1
y/c1=f2…c2
c1/c2=f3…c3
……
c8/c9=f10…c10
c9/c10=f11…0
如此,c10即為最大公約數。
那麼據第一段所述,可得:c9%c10=0,c8%c10=0,c7%c10=0……c1%c10=0,據此可說明被除數和除數最大公約數始終沒有變。於是這樣就得到了最大公約數了。
備註:
兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數
最小公倍數等於兩個數的乘積除以最小公約數
b能被a整除<=>b/a=c…0 (c為整數);
b能整除a<=>a/b=c’…0(c為整數).
//求兩數的最大公約數
#include<stdio.h>
int main()
{
int x,y,c;
scanf("%d %d,&x,&y");
do
{
c=x%y;
x=y;
y=c;
}while(c!=0);
printf("%d",x)
return 0;
}
相關文章
- 輾轉相除法的原理
- 輾轉相除法原理解析
- 輾轉相除法
- 證明:輾轉相除法與更相減損術
- 輾轉相除法 氣泡排序排序
- 透徹理解輾轉相除法
- C++中的輾轉相除法C++
- 【C語言】聊聊輾轉相除法C語言
- 輾轉相除法與更相減損術(求最大公約數)
- 求最大公約數(輾轉相除法)
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- 【演算法分析與設計】輾轉相除法演算法
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- [待更新]歐幾里得演算法(輾轉相除法)與擴充歐幾里得演算法演算法
- 除法與GCD演算法的相關分析GC演算法
- 相機成像原理
- Oracle Freelist和HWM原理探討及相關效能優化(轉)Oracle優化
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- Elasticsearch——document相關原理Elasticsearch
- Webpack相關原理淺析Web
- vue原理相關總結Vue
- 轉置原理
- JavaScript / 除法運算子JavaScript
- 除法謎題(2)
- 除法謎題(1)
- 多項式除法
- android kotlin 安全除法AndroidKotlin
- scss不能用除法?CSS
- 三相非同步電動機星三角+正反轉電路圖原理非同步
- [轉帖]基礎篇:JVM調優原理相關的知識和經驗分享JVM
- Http請求相關(轉)HTTP
- Zookeeper基礎概念及相關原理
- 乘法◆除法◆謎題(7)
- 乘法◆除法◆謎題(11)
- 乘法◆除法◆謎題(9)
- 乘法◆除法◆謎題(8)
- 乘法◆除法◆謎題(6)
- 乘法◆除法◆謎題(5)