限制
總時間限制: 1000ms 記憶體限制: 65536kb
描述
給定兩個正整數,求它們的最大公約數。
輸入
輸入一行,包含兩個正整數(<1,000,000,000)。
輸出
輸出乙個正整數,即這兩個正整數的最大公約數。
樣例輸入
6 9樣例輸出
3提示
求最大公約數可以使用輾轉相除法:
假設a > b > 0,那麼a和b的最大公約數等於b和a%b的最大公約數,然後把b和a%b作為新一輪的輸入。
由於這個過程會一直遞減,直到a%b等於0的時候,b的值就是所要求的最大公約數。
比如:9和6的最大公約數等於6和9%6=3的最大公約數。
由於6%3==0,所以最大公約數為3。
遞迴:
#include
using namespace std;
intdivisor
(int a,
int b)
else
return
divisor
(a,b);}
intmain()
迭代:
#include
using namespace std;
intmain()
else}if
(a)else
return0;
}
輾轉相除求最大公約數
什麼叫輾轉相除法求最大公約數 輾轉相除法求兩個數的最大公約數的步驟如下 先用大的乙個數除大的乙個數,得第乙個餘數 再用兩個數中較小的乙個數除第乙個餘數,得第二個餘數 又用第乙個餘數除第二個餘數,得第三個餘數 這樣逐次用後乙個數去除前乙個餘數,直到餘數是0為止。那麼,最後乙個除數就是所求的最大公約數 ...
輾轉相除法求最大公約數
之前總結過一次高德納taocp中的最大公約數求解,其實課後題中的演算法修改要求實現的是輾轉相除法求解最大公約數。這個題目我最初的理解理解錯了,自然也沒有做出標準答案。現在按照標準答案的解答寫一下相應的 實現 defmaxcommdivisor m,n while m n 0 m m n if m 0...
輾轉相除求最大公約數原理
首先看 如下,並不難,很多人都會寫。public static intf int a,int b return a 舉個例子,例如6,8按照 執行一遍。a b68 8662 20但是這個演算法的原理可是折磨了我很久,不知道大家懂不懂這個原理 兩個數的最大公約數是指能同時整除它們的最大正整數。設兩數為...