Python求最小公倍數(shù)與最大公約數(shù)代碼示例與解題思路
最小公倍數(shù)的幾種解題方法
方法1
代碼思路
- 輸入?yún)?shù):接收兩個(gè)整數(shù)
m和n。 - 確定較大值:判斷
m和n哪個(gè)更大,將較大的值存儲(chǔ)在變量bigger中。 - 尋找最小公倍數(shù):
- 使用一個(gè)
while循環(huán),從bigger開(kāi)始不斷遞增。 - 在每次循環(huán)中,檢查當(dāng)前
bigger是否能同時(shí)被m和n整除。 - 如果可以,則返回當(dāng)前的
bigger作為最小公倍數(shù)。 - 如果不可以,則將
bigger增加 1,繼續(xù)下一次循環(huán)。
- 使用一個(gè)
- 輸出結(jié)果:調(diào)用函數(shù)并打印最小公倍數(shù)
def f1(m, n): # 確定 m 和 n 中較大的值 if m > n: bigger = m else: bigger = n # 從較大的值開(kāi)始,不斷遞增,尋找最小公倍數(shù) while True: # 檢查當(dāng)前的 bigger 是否能同時(shí)被 m 和 n 整除 if bigger % m == 0 and bigger % n == 0: # 如果可以,返回當(dāng)前的 bigger 作為最小公倍數(shù) return bigger else: # 如果不可以,將 bigger 增加 1,繼續(xù)循環(huán) bigger += 1 # 調(diào)用函數(shù)并打印結(jié)果 # 示例:計(jì)算 23 和 74 的最小公倍數(shù) print("%d 是最小公倍數(shù)" % f1(23, 74))
方法2
代碼思路
- 輸入?yún)?shù):接收兩個(gè)整數(shù)
m和n。 - 確定較大值:判斷
m和n哪個(gè)更大,將較大的值存儲(chǔ)在變量bigger中。 - 尋找最小公倍數(shù):
- 初始化一個(gè)計(jì)數(shù)器
i為1。 - 使用一個(gè)
while循環(huán),不斷遞增i。 - 在每次循環(huán)中,計(jì)算
bigger * i,并檢查這個(gè)值是否能同時(shí)被m和n整除。 - 如果可以,則返回
bigger * i作為最小公倍數(shù)。 - 如果不可以,則繼續(xù)下一次循環(huán)。
- 初始化一個(gè)計(jì)數(shù)器
- 輸出結(jié)果:調(diào)用函數(shù)并打印最小公倍數(shù)。
def f2(m, n):
# 確定 m 和 n 中較大的值,作為起點(diǎn)可以減少一些不必要的乘法運(yùn)算
if m > n:
bigger = m
else:
bigger = n
# 初始化計(jì)數(shù)器 i
i = 1
# 從1開(kāi)始不斷遞增,尋找最小公倍數(shù)
while True:
# 計(jì)算當(dāng)前 bigger * i 的值
current_value = bigger * i
# 檢查當(dāng)前的 current_value 是否能同時(shí)被 m 和 n 整除
if current_value % m == 0 and current_value % n == 0:
# 如果可以,返回當(dāng)前的 current_value 作為最小公倍數(shù)
return current_value
else:
# 如果不可以,將計(jì)數(shù)器 i 增加 1,繼續(xù)循環(huán)
i += 1
# 調(diào)用函數(shù)并打印結(jié)果
# 示例:計(jì)算 23 和 74 的最小公倍數(shù)
print("%d 是最小公倍數(shù)" % f2(23, 74))方法3
代碼思路
- 導(dǎo)入math模塊:
math模塊提供了許多數(shù)學(xué)函數(shù),包括計(jì)算最大公約數(shù)(GCD)和最小公倍數(shù)(LCM)的函數(shù)。 - 使用math.lcm函數(shù):直接調(diào)用
math.lcm函數(shù)來(lái)計(jì)算兩個(gè)數(shù)的最小公倍數(shù),并打印結(jié)果。 - 使用GCD計(jì)算LCM:根據(jù)最小公倍數(shù)和最大公約數(shù)的關(guān)系,
LCM(a, b) = abs(a * b) // GCD(a, b),來(lái)計(jì)算兩個(gè)數(shù)的最小公倍數(shù),并打印結(jié)果。這里使用了整除運(yùn)算符//來(lái)確保結(jié)果是整數(shù)。
import math
# 使用math.lcm函數(shù)計(jì)算23和74的最小公倍數(shù),并打印結(jié)果
print("%d是最小公倍數(shù)" % math.lcm(23, 74))
# 使用GCD計(jì)算LCM
# 根據(jù)公式 LCM(a, b) = abs(a * b) // GCD(a, b)
# 計(jì)算23和74的乘積的絕對(duì)值(雖然這里23和74都是正數(shù),絕對(duì)值不是必需的,但為了一般性可以加上)
# 然后除以它們的最大公約數(shù),得到最小公倍數(shù)
lcm_using_gcd = abs(23 * 74) // math.gcd(23, 74)
# 打印結(jié)果
print("%d是最小公倍數(shù)" % lcm_using_gcd)最大公約數(shù)的幾種解題方法
方法1
代碼思路
- 輸入?yún)?shù):接收兩個(gè)整數(shù)
m和n。 - 確定較小值:判斷
m和n哪個(gè)更小,將較小的值存儲(chǔ)在變量smaller中。 - 尋找最大公約數(shù):
- 從
smaller遞減到1。 - 在每次循環(huán)中,檢查當(dāng)前的數(shù)是否能同時(shí)被
m和n整除。 - 如果可以,則返回這個(gè)數(shù)作為最大公約數(shù)。
- 如果不可以,則繼續(xù)下一次循環(huán)。
- 從
- 輸出結(jié)果:調(diào)用函數(shù)并打印最大公約數(shù)
def f1(m, n):
# 確定 m 和 n 中較小的值
if m < n:
smaller = m
else:
smaller = n
# 從 smaller 遞減到 1,尋找最大公約數(shù)
for i in range(smaller, 0, -1): # 注意這里的步長(zhǎng)是-1,表示遞減
# 檢查當(dāng)前的 i 是否能同時(shí)被 m 和 n 整除
if m % i == 0 and n % i == 0:
# 如果可以,返回 i 作為最大公約數(shù)
return i
# 調(diào)用函數(shù)并打印結(jié)果
# 示例:計(jì)算 12 和 36 的最大公約數(shù)
print("%d是最大公約數(shù)" % f1(12, 36))方法2
代碼思路
- 輸入?yún)?shù):接收兩個(gè)整數(shù)
m和n。 - 確定較小值:使用
min函數(shù)找出m和n中的較小值,存儲(chǔ)在變量smaller中。 - 尋找公約數(shù):
- 初始化一個(gè)空列表
f來(lái)存儲(chǔ)找到的公約數(shù)。 - 使用
for循環(huán)遍歷從1到smaller的所有整數(shù)。 - 在每次循環(huán)中,檢查當(dāng)前的整數(shù)是否能同時(shí)被
m和n整除。 - 如果可以,將這個(gè)整數(shù)添加到列表
f中。
- 初始化一個(gè)空列表
- 返回最大公約數(shù):使用
max函數(shù)找出列表f中的最大值,并返回它。 - 輸出結(jié)果:調(diào)用函數(shù)并打印返回的最大公約數(shù)。
def f2(m, n):
# 確定 m 和 n 中的較小值
smaller = min(m, n)
# 初始化一個(gè)空列表來(lái)存儲(chǔ)公約數(shù)
f = []
# 遍歷從1到smaller的所有整數(shù)
for i in range(1, smaller + 1):
# 檢查當(dāng)前的整數(shù)是否能同時(shí)被 m 和 n 整除
if m % i == 0 and n % i == 0:
# 如果可以,將這個(gè)整數(shù)添加到列表 f 中
f.append(i)
# 返回列表 f 中的最大值,即最大公約數(shù)
return max(f)
# 調(diào)用函數(shù)并打印返回的最大公約數(shù)
# 示例:計(jì)算 12 和 36 的最大公約數(shù)
print("%d是最大公約數(shù)" % f2(12, 36))方法3(輾轉(zhuǎn)相除法)
代碼思路:
- 輸入檢查與調(diào)整:
- 函數(shù)
f1接收兩個(gè)整數(shù)m和n作為輸入。 - 為了確保
m不小于n,若m小于n,則兩者進(jìn)行交換。
- 函數(shù)
- 計(jì)算最大公約數(shù):
- 使用
while循環(huán),條件是n不為0。 - 在循環(huán)內(nèi)部,利用元組解包同時(shí)更新
m和n的值:m被賦值為當(dāng)前的n,而n被賦值為m % n(即m除以n的余數(shù))。 - 此過(guò)程會(huì)不斷迭代,直至
n變?yōu)?。
- 使用
- 返回結(jié)果:
- 當(dāng)
n為0時(shí),m中存儲(chǔ)的即為所求的最大公約數(shù),函數(shù)返回m。
- 當(dāng)
def f3(m, n):
# 若m小于n,則交換m和n的值,確保m不小于n(此步驟可選)
if m < n:
m, n = n, m # 利用元組解包進(jìn)行值交換
# 當(dāng)n不為0時(shí),持續(xù)進(jìn)行循環(huán)計(jì)算
while n:
# 利用元組解包同時(shí)更新m和n的值
# m被更新為當(dāng)前的n,n被更新為m除以n的余數(shù)
m, n = n, m % n
# 當(dāng)n為0時(shí),m即為所求的最大公約數(shù)
return m
# 調(diào)用函數(shù)f3,并打印出12和24的最大公約數(shù)
print(f3(12, 24)) # 輸出結(jié)果應(yīng)為12方法4
在Python中,math模塊提供了一個(gè)名為gcd的函數(shù),該函數(shù)能夠高效地計(jì)算出兩個(gè)或多個(gè)整數(shù)的最大公約數(shù)(GCD, Greatest Common Divisor)
import math # 調(diào)用math.gcd函數(shù)計(jì)算3139和2117的最大公約數(shù) result = math.gcd(3139, 2117) # 打印結(jié)果 print(result)
總結(jié)
到此這篇關(guān)于Python求最小公倍數(shù)與最大公約數(shù)的文章就介紹到這了,更多相關(guān)Python求最小公倍數(shù)與最大公約數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python求最大公約數(shù)和最小公倍數(shù)的簡(jiǎn)單方法
- Python自定義函數(shù)實(shí)現(xiàn)求兩個(gè)數(shù)最大公約數(shù)、最小公倍數(shù)示例
- Python實(shí)現(xiàn)利用最大公約數(shù)求三個(gè)正整數(shù)的最小公倍數(shù)示例
- Python基于遞歸算法求最小公倍數(shù)和最大公約數(shù)示例
- python輾轉(zhuǎn)相除法求最大公約數(shù)和最小公倍數(shù)的實(shí)現(xiàn)
- Python基于遞歸和非遞歸算法求兩個(gè)數(shù)最大公約數(shù)、最小公倍數(shù)示例
相關(guān)文章
python實(shí)現(xiàn)通過(guò)pil模塊對(duì)圖片格式進(jìn)行轉(zhuǎn)換的方法
這篇文章主要介紹了python實(shí)現(xiàn)通過(guò)pil模塊對(duì)圖片格式進(jìn)行轉(zhuǎn)換的方法,涉及Python中pil模塊的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
python中ransac算法擬合圓的實(shí)現(xiàn)
RANSAC是一種用于從包含異常數(shù)據(jù)的樣本數(shù)據(jù)集中計(jì)算數(shù)學(xué)模型參數(shù)的算法,本文主要介紹了python中ransac算法擬合圓的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01
使用Python快速搭建HTTP服務(wù)和文件共享服務(wù)的實(shí)例講解
今天小編就為大家分享一篇使用Python快速搭建HTTP服務(wù)和文件共享服務(wù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python連接clickhouse的端口問(wèn)題及解決
這篇文章主要介紹了python連接clickhouse的端口問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Python自動(dòng)操作神器PyAutoGUI的使用教程
這篇文章主要是想和大家來(lái)聊一聊Python如何利用自動(dòng)操作 GUI 神器——PyAutoGUI在桌面實(shí)現(xiàn)自動(dòng)化操作,感興趣的小伙伴可以了解一下2022-06-06
使用Python玩轉(zhuǎn)串口(基于pySerial問(wèn)題)
這篇文章主要介紹了使用Python玩轉(zhuǎn)串口(基于pySerial問(wèn)題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python_tkinter彈出對(duì)話(huà)框創(chuàng)建2
這篇文章主要介紹了python_tkinter彈出對(duì)話(huà)框創(chuàng)建,上以篇文章我們簡(jiǎn)單的對(duì)對(duì)話(huà)框創(chuàng)建做了簡(jiǎn)單介紹,本文將繼續(xù)更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-03-03

