之前用c語言實現過 求最大公約數:
這裡我將用c++ 繼續實現其他幾種方法的解析。
題目描述
輸入兩個數,求最大公約數。
主要演算法及示例
1. 查詢約數法先分別找出兩個數各自所有的約數,再從兩個數的約數中找到公有的約數,其中最大的那個公有約數就是要求的最大公約數。
#includeusing namespace std;
int main()
cout<
2. 更相減損法
1)判斷兩個數是否是偶數,如果是用2約簡;如果不是則執行第二步
2)設a為兩數中較大的數,b為較小的數,c = a-b,接著c與b比較,再次較大的數減去較小的數,直到較小的數與當前的差c相等。
則最大公約數等於第一步中約掉的若干個2與第二步中得出的c的乘積。
3. 求差判定法
如果兩個數相差不大,可以用大數減去小數,所得的差與小數的最大公約數就是原來兩個數的最大公約數.例如:求78和60的最大公約數.78-60=18,18和60的最大公約數是6,所以78和60的最大公約數是6.
如果兩個數相差較大,可以用大數減去小數的若干倍,一直減到差比小數小為止,差和小數的最大公約數就是原來兩數的最大公約數.例如:求92和16的最大公約數.92-16=76,76- 16=60, 60-16=44,44-16=28,28-16=12,12和16的最大公約數是4,所以92和16的最大公約數就是4.
4. 分解因式法
先分別把兩個數分解質因數,再找出它們全部公有的質因數,然後把這些公有質因數相乘,得到的積就是這兩個數的最大公約數.
例如:求125和300的最大公約數.因為125= 5x5x5, 300=2x2x3x5x5,所以125和300的最大公約數是5x5=25.
5. 短除法
為了簡便,將兩個數的分解過程用同乙個短除法來表示,那麼最大公約數就是所有除數的乘積.
例如:求180和324的最大公約數.
因為:5和9互質,所以180和324的最大公約數是4x9=36。
6. 除法
當兩個數中較小的數是質數時,可採用除法求解.即用較大的數除以較小的數,如果能夠整除,則較小的數是這兩個數的最大公約數.
例如:求19和152,13和273的最大公約數。因為152-19=8, 273-13=21. (19和13都是質數. )所以19和152的最大公約數是19, 13和273的最大公約數是13.
7. 縮倍法
如果兩個數沒有之間沒有倍數關係,可以把較小的數依次除以2、3、…直到求得的商是較大數的約數為止,這時的商就是兩個數的最大公約數.例如:求30和24的最大公約數.24+4=6, 6是30的約數,所以30和24的最大公約數是6.
8. 輾轉相除法
掌握了這些方法,小夥伴們就再也不用怕最大公約數和最小公倍數的題了。
看完記得關注博主喲~ 下篇部落格是牛客網的題目:求最小公倍數!
求兩個數最大公約數
題目 寫乙個程式,求兩個正數的最大公約數。如1100100210001,120200021,求其最大公約數 分析 設兩個數分別為x,y 求其最大公約數f x,y 如果有x 2 0而y 2不等於0,那麼可以 約簡為f x 2,y 同樣道理適用於y 如果x與y都是偶數,那麼最大公約數可以為f x 2,y...
求兩個數的最大公約數
求公約數有多種方法,在這主要介紹兩種方法。1 更相減損之術 以兩數中較大的數減去較小的數,獲得的差與原先較小的數構成新的一對數,在以大的數減去小的數,依次迴圈。用同樣的方法操作,直至產生一對相等的數為止,該數即為最大公約數。include include intmain while n 0 if a...
求兩個數的最大公約數
下面用兩種方法求兩個數的最大公約數 第一種,用遞減迴圈從較小的數開始到0依次查詢能同時整除兩個數的數,則這個數就為這兩個數的最大公約數,如下 include include int main else for i tmp i 0 i system pause return 0 第二種方法,輾轉相除法...