程式設計之美2 7 最大公約數,最小公倍數

2021-06-26 00:09:35 字數 937 閱讀 5448

書中的題目是求兩個數的最大公約數,其實這個問題時當我們學習c語言的時候老師就講過的演算法,和教學中的求素數是乙個型別的問題。

我們當時學的方法是 「輾轉相除法」,即利用公式: f(x, y) = f(y, x % y),直到 x % y == 0,取x就是兩個數的最大公約數。

但是書中說道,乘除運算太浪費時間了,所以,我們可以換一種方法去思考這個問題,乘除不能用,就只能是加減了,所以,書中利用如果乙個數能夠同時整除x和y,則必能同時整除x-y和y,所以我們定義x和y的最大公約數是f(x,y),那麼依據上面的思想,可以得到f(x,y) = f(x-y,y)。

函式宣告如下:

int dutthegreatestcommondivisor(int, int);

源**如下:

/*

*這裡的思想是:如果乙個數能夠同時整除x和y,則必能同時整除x-y和y,所以

*我們定義x和y的最大公約數是f(x,y),那麼依據上面的思想,可以得到f(x,y) = f(x-y,y)

*/int dutthegreatestcommondivisor(int m, int n)

既然說到了最大公約數,那麼和它相對應的是最小公倍數,不記得是上幾年級的時候,我們就學過乙個公式,兩個數的最小公倍數計算方法是 : (x * y) / 最大公約數(x, y)。

函式宣告如下:

int duttheleastcommonmultiple(int, int);

源**如下:

/*

*最小公倍數可以利用最大公約數得到,數學推導可以看看這個:

**/int duttheleastcommonmultiple(int x, int y)

程式設計之美 2 7 最大公約數問題

1.簡述 寫乙個程式,求兩個正整數的最大公約數。如果兩個正整數很大,有什麼簡單的方法嗎?2.思路 這個書上總結的很全了已經。輾轉相除法,設f x,y 表示x與y的最大公因子,如果x y k z,z 0,那麼f x,y f y,z 如果x y k z,z 0,那麼f x,y y,即此時x可以整除y。比...

程式設計之美 2 7 最大公約數問題

1.簡述 寫乙個程式,求兩個正整數的最大公約數。如果兩個正整數很大,有什麼簡單的方法嗎?2.思路 這個書上總結的很全了已經。輾轉相除法,設f x,y 表示x與y的最大公因子,如果x y k z,z 0,那麼f x,y f y,z 如果x y k z,z 0,那麼f x,y y,即此時x可以整除y。比...

python for練習最大公約數 最小公倍數

需求 輸入兩個數值 求兩個數的最大公約數和最小公倍數.最小公倍數 num1 num2 最大公約數 思路 1.最大公約數小於等於輸入兩個數中最小的數 2.利用迴圈,最後一次迴圈可以被兩個數同時整除的數為最大公約數。1.輸入兩個數值 num1 int input 第乙個數 num2 int input ...