天天資訊:【算法實(shí)踐】| 一步步手把手帶你實(shí)現(xiàn)尋找最小公倍數(shù)

2022-12-14 10:21:57 來(lái)源:51CTO博客

前言

其實(shí)最小公倍數(shù)的概念和計(jì)算最小公倍數(shù)的方法.那是我們?cè)趯W(xué)習(xí)小學(xué)數(shù)學(xué)的時(shí)候就已經(jīng)掌握的數(shù)學(xué)知識(shí),為了更加通俗易懂一點(diǎn),本文先從一個(gè)"分元寶"的故事入手:


(資料圖片僅供參考)

亡故的先父留下遺囑,

共有遺產(chǎn)17個(gè)元寶,

老大得元寶的二分之一、 17/2=8.5

老二得元寶的三分之一、 17/3=5.66666

老三得元寶的九分之一、 17/9=1.8

問(wèn)他們每一個(gè)人分別應(yīng)該分幾個(gè)元寶?

《一代大商孟洛川》中是這樣做的

孟洛川拿來(lái)一個(gè)元寶加上去

好了,現(xiàn)在分元寶

答案是:老大9個(gè)元寶、老二6個(gè)元寶、老三2個(gè)元寶。

還剩下一個(gè)元寶,是我們孟洛川的,拿回來(lái)

很不可思議吧

很簡(jiǎn)單的初中數(shù)學(xué)題老大分1/2,老二分1/3,老三分1/9

這三個(gè)數(shù)的最小公倍數(shù)就是18,即9/18+6/18+2/18=17/18,就是說(shuō)他們老爺子給的這個(gè)比例和根本就沒到1,。即1-17/18=1/18,也就是說(shuō),直接分,那是分不完17元寶的。這樣這要用18這個(gè)最小公倍數(shù)就能分開,最后還剩一個(gè)

很多人說(shuō)數(shù)學(xué)學(xué)會(huì)四則混合運(yùn)算就夠了.其他買菜又用不到,這不,如果沒有數(shù)學(xué)思維,連財(cái)產(chǎn)都分不明白(哈哈哈~),并不是除了四則混合運(yùn)算其他數(shù)學(xué)知識(shí)沒有用,而是我們沒有學(xué)會(huì)或者不加以思考.其實(shí)很多時(shí)候我們?cè)诓恢挥X中就已經(jīng)使用了很多數(shù)學(xué)方法解決生活中所遇到的問(wèn)題,所以學(xué)習(xí)數(shù)學(xué),除了數(shù)學(xué)本身,還有數(shù)學(xué)思維的培養(yǎng).言歸正傳,從上面的故事可看出最小公倍數(shù)對(duì)我們生產(chǎn)生活是有很大幫助的.故事中的例子就是分?jǐn)?shù)的加減法運(yùn)算在生活中的實(shí)際應(yīng)用

概念

在上篇文章《??【算法實(shí)踐】| 一步步帶你實(shí)現(xiàn)尋找最大公約數(shù)??》中我們淺嘗了最大公約數(shù)的計(jì)算,那最大公約數(shù)有沒有什么聯(lián)系呢?

最大公約數(shù)往往是和最小公倍數(shù)成對(duì)出現(xiàn)的.最小公倍數(shù)(Least Common Multiple,縮寫L.C.M.),如果有一個(gè)自然數(shù)a能被自然數(shù)b整除,則稱a為b的倍數(shù),b為a的約數(shù),對(duì)于兩個(gè)自然數(shù)來(lái)說(shuō),指該兩數(shù)共有倍數(shù)中最小的一個(gè)。計(jì)算最小公倍數(shù)時(shí),通常會(huì)借助最大公約數(shù)來(lái)輔助計(jì)算。

如果一個(gè)數(shù)既是a又是b的倍數(shù),那么我們就把這個(gè)數(shù)叫著a和b的公倍數(shù),如果這個(gè)數(shù)在a b的所有公倍數(shù)里為最小,那這個(gè)數(shù)就是最小公倍數(shù)。

通俗點(diǎn)說(shuō),幾個(gè)數(shù)共有的倍數(shù)叫做這幾個(gè)數(shù)的公倍數(shù),其中除0以外最小的一個(gè)公倍數(shù),叫做這幾個(gè)數(shù)的最小公倍數(shù)。自然數(shù)a、b的最小公倍數(shù)可以記作[a、b],自然數(shù)a、b的最大公約數(shù)(最大公因數(shù))可以記作(a、b),當(dāng)(a、b)=1時(shí),[a、b]= a×b。如果兩個(gè)數(shù)是倍數(shù)關(guān)系,則它們的最小公倍數(shù)就是較大的數(shù),相鄰的兩個(gè)自然數(shù)的最小公倍數(shù)是它們的乘積。

簡(jiǎn)單概括如下:

最小公倍數(shù):兩個(gè)或多個(gè)整數(shù)公有的倍數(shù)叫做它們的公倍數(shù),其中除0以外最小的一個(gè)公倍數(shù)就叫做這幾個(gè)整數(shù)的最小公倍數(shù)

最大公約數(shù)最小公倍數(shù)二者關(guān)系:兩個(gè)數(shù)之積=最小公倍數(shù)*最大公約數(shù),這也可作為我們求解最小公倍數(shù)的入手點(diǎn),但是解題時(shí)要避免和最大公約數(shù)問(wèn)題混淆

還有另外一個(gè)入手點(diǎn):

因?yàn)椋?strong>素?cái)?shù)(質(zhì)數(shù))是不能被1和自身數(shù)以外的其它數(shù)整除的數(shù);素?cái)?shù)X的N次方,是只能被X的N-1以下次方,1和自身數(shù)整除.

所以,在求A,B,C,D,E,…,Z的最小公倍數(shù)時(shí),只需要把這些數(shù)分解為素?cái)?shù)的N次方之間的乘積后,取各素因子的最高次方的乘積,就是這些數(shù)的最小公倍數(shù).

適用范圍

最小公倍數(shù)的適用范圍:分?jǐn)?shù)的加減法,中國(guó)剩余定理(正確的題在最小公倍數(shù)內(nèi)有解,有唯一的解)

最小公倍數(shù)的計(jì)算方法

綜上所述,求解最小公倍數(shù)有以下兩種方法:

1.分解質(zhì)因數(shù)法

先把這幾個(gè)數(shù)的質(zhì)因數(shù)寫出來(lái),最小公倍數(shù)等于它們所有的質(zhì)因數(shù)的乘積,如果有幾個(gè)質(zhì)因數(shù)相同,則比較兩數(shù)中哪個(gè)數(shù)有該質(zhì)因數(shù)的個(gè)數(shù)較多,乘較多的次數(shù)即可。

2.公式法

由于兩個(gè)數(shù)的乘積等于這兩個(gè)數(shù)的最大公約數(shù)與最小公倍數(shù)的積。即(a,b)×[a,b]=a×b。所以,求兩個(gè)數(shù)的最小公倍數(shù),就可以先求出它們的最大公約數(shù),然后用上述公式求出它們的最小公倍數(shù)。

計(jì)算流程

1.分解質(zhì)因數(shù)(窮舉法)

2.公式法

根據(jù)兩者的關(guān)系,先計(jì)算最大公約數(shù),然后使用公式計(jì)算最小公倍數(shù)

算法實(shí)現(xiàn)

1.分解質(zhì)因數(shù)的實(shí)現(xiàn)步驟:(窮舉法)

輸入待求最小公倍數(shù)的兩個(gè)整數(shù)x,y找出兩個(gè)整數(shù)中較大的一個(gè)數(shù)字,并記錄為max使用循環(huán),判斷max是否可以同時(shí)整除x和y,如果可以同時(shí)整除.退出循環(huán),將max賦值給Flag,否則max加1,并且繼續(xù)執(zhí)行循環(huán)直到找到Flag返回Flag,即x與y的最小公倍數(shù)

代碼如下:

方法1

def LCM(x,y):    if x>y:        max = x    else:        max = y    while (True):        if((max % x == 0) and (max % y == 0)):            Flag = max            break        max = max + 1    return Flagx = int(input("請(qǐng)輸入第一個(gè)整數(shù):"))y = int(input("請(qǐng)輸入第二個(gè)整數(shù):"))print(x,",", y, "的最小公倍數(shù)為:", LCM(x,y))

執(zhí)行結(jié)果如下:

方法2:

def lcm(x, y):    #質(zhì)因數(shù)分解    Flag = 1    i = 2    while i <= min(x, y):        if x % i == 0 and y % i == 0:            Flag *= i            x, y = x // i, y // i        else:            i += 1    Flag = Flag * x * y    return Flagx = int(input("請(qǐng)輸入第一個(gè)整數(shù):"))y = int(input("請(qǐng)輸入第二個(gè)整數(shù):"))print(x,",", y, "的最小公倍數(shù)為:", lcm(x,y))

執(zhí)行結(jié)果如下:

2.公式法具體實(shí)現(xiàn)步驟:

輸入待求最小公倍數(shù)的兩個(gè)整數(shù)x,y計(jì)算兩數(shù)的乘積s計(jì)算最大公約數(shù)x,y=y,(x%y)根據(jù)公式兩個(gè)數(shù)之積=最小公倍數(shù)*最大公約數(shù),計(jì)算最小公倍數(shù):s//y輸出最小公倍數(shù)

具體實(shí)現(xiàn)代碼如下:

x = int(input("請(qǐng)輸入第一個(gè)整數(shù):"))y = int(input("請(qǐng)輸入第二個(gè)整數(shù):"))s = x * ywhile x % y != 0:    x, y = y, (x % y)else:    print(x, ",", y, "的最大公約數(shù)為:",y)    print(x, ",", y, "的最小公倍數(shù)為:",s // y)

執(zhí)行結(jié)果如下:

標(biāo)簽: 最小公倍數(shù) 適用范圍 最大公約數(shù)

上一篇:入門練習(xí)3-10
下一篇:世界視訊!【算法實(shí)踐】| 一步步帶你實(shí)現(xiàn)尋找最大公約數(shù)