輾轉相除法原理
輾轉相除法原理:
假設有兩個數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;
}
相關文章
- 輾轉相除法的原理
- 輾轉相除法原理解析
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- 透徹理解輾轉相除法
- 輾轉相除法 氣泡排序排序
- C++中的輾轉相除法C++
- 【C語言】聊聊輾轉相除法C語言
- 【演算法分析與設計】輾轉相除法演算法
- python用輾轉相除法求最大公約數Python
- 輾轉相除法求最大公約數——[js練習]JS
- 漫畫演算法:輾轉相除法是什麼鬼?演算法
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- C語言第七篇:輾轉相除法求最大公約數C語言
- 歐幾里德演算法(又稱輾轉相除法)求最大公約數,以及最小公倍數演算法
- 除法與GCD演算法的相關分析GC演算法
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- 相機工作原理
- 相機成像原理
- Elasticsearch——document相關原理Elasticsearch
- scss不能用除法?CSS
- JavaScript / 除法運算子JavaScript
- MySQL 除法問題MySql
- Webpack相關原理淺析Web
- vue原理相關總結Vue
- 背部痘痘特效去除法特效
- Oracle Freelist和HWM原理探討及相關效能優化(轉)Oracle優化
- excel除法公式怎麼輸入 excel除法函式怎麼輸入Excel公式函式
- CBO的相關原理 系列一
- Oracle Exam的排除法Oracle
- android kotlin 安全除法AndroidKotlin
- Zookeeper基礎概念及相關原理
- 【leetcode】29. Divide Two Integers 不能使用乘除法的整數除法LeetCodeIDE
- 加密原理(轉)加密
- 轉置原理
- [除數函式+除法分塊]函式
- 01—Hbuilder—js—除法、取餘數UIJS
- asp.net 除法保留小數ASP.NET
- 三相非同步電動機星三角+正反轉電路圖原理非同步