透徹理解輾轉相除法
一、理解
今天終於對輾轉相除法有了一個透徹的理解!!!
接觸過一些演算法的應該都知道輾轉相除法是求最大公約數的一個方法。
那麼為什麼這種方法可以求出來呢?
我們先來假設a,b的最小公約數為g,那麼我們可以這樣表示a=m*g,b=n*g;(m,n為整數)(*)
a=b*k+r;(k,r為整數)(**)
現在我們用(*)中的a,b替換(**),得到m*g=n*g*k+r;
上述式子變形得到r=g*(m-n*k);
此時可以看出a,b的最大公約數也是b,r的最大公約數。
然後不斷縮小規模,直到其中一個數為0;即r得值為0;(還有一丟丟迷惑中。。。)
二、應用(最大公約數和最小公倍數)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
//輾轉相處法 求最大公約數
int GCD(int a,int b){
if(b == 0){
return a;
}else{
return GCD(b,a%b);
}
}
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF) {
printf("%d\n",GCD(a,b));
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
//求最小公倍數
int GCD(int a,int b){
if(b == 0){
return a;
}else{
return GCD(b,a%b);
}
}
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF) {
printf("%d\n",a*b/GCD(a,b));
}
return 0;
}
相關文章
- 輾轉相除法原理解析
- 輾轉相除法原理
- 輾轉相除法的原理
- 輾轉相除法 氣泡排序排序
- C++中的輾轉相除法C++
- 【C語言】聊聊輾轉相除法C語言
- 【演算法分析與設計】輾轉相除法演算法
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- python用輾轉相除法求最大公約數Python
- 輾轉相除法求最大公約數——[js練習]JS
- 漫畫演算法:輾轉相除法是什麼鬼?演算法
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- C語言第七篇:輾轉相除法求最大公約數C語言
- 回撥函式透徹理解Java函式Java
- 透徹理解塊級元素的寬度
- 高併發,你真的理解透徹了嗎?
- 歐幾里德演算法(又稱輾轉相除法)求最大公約數,以及最小公倍數演算法
- 透過案例對SparkStreaming透徹理解三板斧之二Spark
- 透徹理解Java併發的等待佇列——ConditionJava佇列
- 透徹理解C++11新特性:右值引用、std::move、std::forwardC++Forward
- 除法與GCD演算法的相關分析GC演算法
- 徹底理解synchronizedsynchronized
- 學併發程式設計,透徹理解這三個核心是關鍵程式設計
- JSP透過JDBC與Oracle相連 (轉)JSJDBCOracle
- 徹底理解Golang MapGolang
- 徹底理解正則
- 徹底理解ReentrantLockReentrantLock
- 徹底理解volatile
- 那些你不知道的Dart細節之帶你透徹理解非同步Dart非同步
- 深入理解 Java 虛擬機器:Java 記憶體區域透徹分析Java虛擬機記憶體
- 深入理解Java虛擬機器-Java記憶體區域透徹分析Java虛擬機記憶體
- 徹底理解c++的隱式型別轉換C++型別
- Map 綜述—徹頭徹尾理解 ConcurrentHashMapHashMap
- Map 綜述(二):徹頭徹尾理解 LinkedHashMapHashMap
- 徹底理解cookie,session,tokenCookieSession
- 徹底理解JavaScript中的thisJavaScript
- 深入JVM,帶你快速、透徹理解G1回收的原理和實現!JVM
- 43_初識搜尋引擎_什麼是mapping再次回爐透徹理解APP