給定兩個數,求這兩個數的最大公約數

2021-10-12 09:59:54 字數 799 閱讀 3634

第一次嘗試

#include

void

math_gys

(int a,

int b)

else

for(

int i = t; i <= a && i <= b; i--)}

}int

main()

此**我的做法不夠好,這是一種暴力窮舉法,雖然能解決問題,但是不夠好,仍需進行優化。

第二次嘗試

#define _crt_secure_no_warnings#include

#include

intmain()

printf

("請輸入兩個數\n");

scanf

("%d %d"

,&a,

&b);

while

(yushu!=0)

else

}return0;

}

在網上查詢之後,得到了另一種方法,輾轉相除法,原理為:

先用小的乙個數除大的乙個數,得第乙個餘數;

再用第乙個餘數除小的乙個數,得第二個餘數;

又用第二個餘數除第乙個餘數,得第三個餘數;

這樣逐次用後乙個數去除前乙個餘數,直到餘數是0為止。那麼,最後乙個除數就是所求的最大公約數(如果最後的除數是1,那麼原來的兩個數是互質數)。

優化後的**比較簡潔的,直觀地看起來讓人很舒服,而且我感覺效能也會好一些。

發表於 2020-10-16 18:45

求兩個數最大公約數

題目 寫乙個程式,求兩個正數的最大公約數。如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 第二種方法,輾轉相除法...