C語言程式設計 C語言求最小公倍數(詳解版)!

2022-07-12 21:57:19 字數 1415 閱讀 2627

問題描述

求任意兩個正整數的最小公倍數(lcm)。

問題分析

最小公倍數(least common multiple,lcm),如果有乙個自然數a能被自然數b整除,則稱a為b的倍數,b為a的約數,對於兩個整數來說,指該兩數共有倍數中最小的乙個。計算最小公倍數時,通常會借助最大公約數來輔助計算。

最小公倍數=兩數的乘積/最大公約(因)數,解題時要避免和最大公約(因)數問題混淆。

對於最小公倍數的求解,除了利用最大公約數外,還可根據定義進行演算法設計。要求任意兩個正整數的最小公倍數即,求出乙個最小的能同時被兩整數整除的自然數。

演算法設計

對於輸入的兩個正整數m和n每次輸入的大小順序可能不同,為了使程式具有一般性,首先對整數所m和n進行大小排序,規定變數m中儲存大數、變數n中儲存小數。

輸入的兩個數,大數m是小數n的倍數,那麼大數m即為所求的最小公倍數;若大數m不能被小數n整除則需要尋找乙個能同時被兩數整除的自然數。

從大數m開始依次向後遞增直到找到第乙個能同時被兩數整除的數為止,所以迴圈變數i的初值為尋找第乙個能同時被兩整數整除的自然數,並將其輸出。需要注意的是,在找到第乙個滿足條件的i值後,迴圈沒必要繼續下去,所以用break來結束迴圈。

在上面的分析過程中沒有提到迴圈變數的終止條件,因i的最大值不能確定,像這種終止條件不確定的情況如何來表示?方法有兩種:

第一,可以把判定條件表示成迴圈變數滿足的基本條件,如本例終止條件可表示成i>0;

第二,終止條件省略不寫,利用迴圈體中的語句結束迴圈,如在找到第乙個滿足條件的自然數時利用break語句結束迴圈。

下面是完整的**:

#includeint

main()

for(i=n; i>0; i--) /*

按照從大到小的順序尋找滿足條件的自然數

*/if(m%i==0 && n%i==0

)

return0;

}

執行結果:

不管你是轉行也好,初學也罷,高階也可,如果你想學程式設計,高階程式設計師~

【值得關注】我的程式設計學習交流俱樂部!【點選進入】

全棧程式設計師正在等你加入~

C語言求兩數最小公倍數

求最小公倍數 方法一 給兩個數a,b,讓a和i相乘 i從1到b 每一次去模b,如果不等於0,然後i 1,直到等於0就找到了 include intmain printf d n a i return0 方法二 乙個數從a增加到a b,如果可以同時整數兩數,那麼就找到了 include intmain...

求最小公倍數 關於對最小公倍數的規範思考

已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入乙個正整數n。輸出乙個整數,表示你找到的最小公倍數。9504 資料規模與約定 1 n 106。正確答案 求最小公倍數,要明確兩種特殊情況 includeusing namespace std int main int k...

求最小公倍數(擴充套件版)

已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。多組輸入,每組輸入乙個正整數n。1 n 10 5 輸出乙個整數,表示你找到的最小公倍數。這個題的意思就是要我們在1 n的範圍內找三個數,使他們的最小公倍數在這個範圍內的組合是最大的。那麼,如果我們找三個兩兩互質的數,這樣只需...