透徹理解輾轉相除法
一、理解
今天終於對輾轉相除法有了一個透徹的理解!!!
接觸過一些演算法的應該都知道輾轉相除法是求最大公約數的一個方法。
那麼為什麼這種方法可以求出來呢?
我們先來假設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
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- 高併發,你真的理解透徹了嗎?
- 透過案例對SparkStreaming透徹理解三板斧之二Spark
- 透徹理解Java併發的等待佇列——ConditionJava佇列
- [待更新]歐幾里得演算法(輾轉相除法)與擴充歐幾里得演算法演算法
- 透徹理解C++11新特性:右值引用、std::move、std::forwardC++Forward
- 徹底理解c++的隱式型別轉換C++型別
- 徹底理解ReentrantLockReentrantLock
- 徹底理解volatile
- 徹底理解synchronizedsynchronized
- 學併發程式設計,透徹理解這三個核心是關鍵程式設計
- Map 綜述—徹頭徹尾理解 ConcurrentHashMapHashMap
- 除法與GCD演算法的相關分析GC演算法
- 徹底理解kubernetes CNI
- 徹底理解正則
- 徹底理解Golang MapGolang
- 深入理解 Java 虛擬機器:Java 記憶體區域透徹分析Java虛擬機記憶體
- 深入理解Java虛擬機器-Java記憶體區域透徹分析Java虛擬機記憶體
- 那些你不知道的Dart細節之帶你透徹理解非同步Dart非同步
- 43_初識搜尋引擎_什麼是mapping再次回爐透徹理解APP
- Map 綜述(二):徹頭徹尾理解 LinkedHashMapHashMap
- 徹底理解JavaScript中的thisJavaScript
- 徹底理解cookie,session,tokenCookieSession
- 深入JVM,帶你快速、透徹理解G1回收的原理和實現!JVM
- 徹底理解連結器:四
- 小白(新手)如何徹底理解索引?索引