Python求最小公倍數(shù)與最大公約數(shù)代碼示例與解題思路
更新時間:2024年11月22日 10:32:24 作者:鈴兒響叮當不響
這篇文章主要給大家介紹了Python求最小公倍數(shù)與最大公約數(shù)代碼示例與解題思路的相關資料,包括迭代法、使用math模塊的lcm和gcd函數(shù)以及輾轉相除法,需要的朋友可以參考下
最小公倍數(shù)的幾種解題方法
方法1
代碼思路
- 輸入?yún)?shù):接收兩個整數(shù)
m
和n
。 - 確定較大值:判斷
m
和n
哪個更大,將較大的值存儲在變量bigger
中。 - 尋找最小公倍數(shù):
- 使用一個
while
循環(huán),從bigger
開始不斷遞增。 - 在每次循環(huán)中,檢查當前
bigger
是否能同時被m
和n
整除。 - 如果可以,則返回當前的
bigger
作為最小公倍數(shù)。 - 如果不可以,則將
bigger
增加 1,繼續(xù)下一次循環(huán)。
- 使用一個
- 輸出結果:調(diào)用函數(shù)并打印最小公倍數(shù)
def f1(m, n): # 確定 m 和 n 中較大的值 if m > n: bigger = m else: bigger = n # 從較大的值開始,不斷遞增,尋找最小公倍數(shù) while True: # 檢查當前的 bigger 是否能同時被 m 和 n 整除 if bigger % m == 0 and bigger % n == 0: # 如果可以,返回當前的 bigger 作為最小公倍數(shù) return bigger else: # 如果不可以,將 bigger 增加 1,繼續(xù)循環(huán) bigger += 1 # 調(diào)用函數(shù)并打印結果 # 示例:計算 23 和 74 的最小公倍數(shù) print("%d 是最小公倍數(shù)" % f1(23, 74))
方法2
代碼思路
- 輸入?yún)?shù):接收兩個整數(shù)
m
和n
。 - 確定較大值:判斷
m
和n
哪個更大,將較大的值存儲在變量bigger
中。 - 尋找最小公倍數(shù):
- 初始化一個計數(shù)器
i
為1。 - 使用一個
while
循環(huán),不斷遞增i
。 - 在每次循環(huán)中,計算
bigger * i
,并檢查這個值是否能同時被m
和n
整除。 - 如果可以,則返回
bigger * i
作為最小公倍數(shù)。 - 如果不可以,則繼續(xù)下一次循環(huán)。
- 初始化一個計數(shù)器
- 輸出結果:調(diào)用函數(shù)并打印最小公倍數(shù)。
def f2(m, n): # 確定 m 和 n 中較大的值,作為起點可以減少一些不必要的乘法運算 if m > n: bigger = m else: bigger = n # 初始化計數(shù)器 i i = 1 # 從1開始不斷遞增,尋找最小公倍數(shù) while True: # 計算當前 bigger * i 的值 current_value = bigger * i # 檢查當前的 current_value 是否能同時被 m 和 n 整除 if current_value % m == 0 and current_value % n == 0: # 如果可以,返回當前的 current_value 作為最小公倍數(shù) return current_value else: # 如果不可以,將計數(shù)器 i 增加 1,繼續(xù)循環(huán) i += 1 # 調(diào)用函數(shù)并打印結果 # 示例:計算 23 和 74 的最小公倍數(shù) print("%d 是最小公倍數(shù)" % f2(23, 74))
方法3
代碼思路
- 導入math模塊:
math
模塊提供了許多數(shù)學函數(shù),包括計算最大公約數(shù)(GCD)和最小公倍數(shù)(LCM)的函數(shù)。 - 使用math.lcm函數(shù):直接調(diào)用
math.lcm
函數(shù)來計算兩個數(shù)的最小公倍數(shù),并打印結果。 - 使用GCD計算LCM:根據(jù)最小公倍數(shù)和最大公約數(shù)的關系,
LCM(a, b) = abs(a * b) // GCD(a, b)
,來計算兩個數(shù)的最小公倍數(shù),并打印結果。這里使用了整除運算符//
來確保結果是整數(shù)。
import math # 使用math.lcm函數(shù)計算23和74的最小公倍數(shù),并打印結果 print("%d是最小公倍數(shù)" % math.lcm(23, 74)) # 使用GCD計算LCM # 根據(jù)公式 LCM(a, b) = abs(a * b) // GCD(a, b) # 計算23和74的乘積的絕對值(雖然這里23和74都是正數(shù),絕對值不是必需的,但為了一般性可以加上) # 然后除以它們的最大公約數(shù),得到最小公倍數(shù) lcm_using_gcd = abs(23 * 74) // math.gcd(23, 74) # 打印結果 print("%d是最小公倍數(shù)" % lcm_using_gcd)
最大公約數(shù)的幾種解題方法
方法1
代碼思路
- 輸入?yún)?shù):接收兩個整數(shù)
m
和n
。 - 確定較小值:判斷
m
和n
哪個更小,將較小的值存儲在變量smaller
中。 - 尋找最大公約數(shù):
- 從
smaller
遞減到1。 - 在每次循環(huán)中,檢查當前的數(shù)是否能同時被
m
和n
整除。 - 如果可以,則返回這個數(shù)作為最大公約數(shù)。
- 如果不可以,則繼續(xù)下一次循環(huán)。
- 從
- 輸出結果:調(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): # 注意這里的步長是-1,表示遞減 # 檢查當前的 i 是否能同時被 m 和 n 整除 if m % i == 0 and n % i == 0: # 如果可以,返回 i 作為最大公約數(shù) return i # 調(diào)用函數(shù)并打印結果 # 示例:計算 12 和 36 的最大公約數(shù) print("%d是最大公約數(shù)" % f1(12, 36))
方法2
代碼思路
- 輸入?yún)?shù):接收兩個整數(shù)
m
和n
。 - 確定較小值:使用
min
函數(shù)找出m
和n
中的較小值,存儲在變量smaller
中。 - 尋找公約數(shù):
- 初始化一個空列表
f
來存儲找到的公約數(shù)。 - 使用
for
循環(huán)遍歷從1到smaller
的所有整數(shù)。 - 在每次循環(huán)中,檢查當前的整數(shù)是否能同時被
m
和n
整除。 - 如果可以,將這個整數(shù)添加到列表
f
中。
- 初始化一個空列表
- 返回最大公約數(shù):使用
max
函數(shù)找出列表f
中的最大值,并返回它。 - 輸出結果:調(diào)用函數(shù)并打印返回的最大公約數(shù)。
def f2(m, n): # 確定 m 和 n 中的較小值 smaller = min(m, n) # 初始化一個空列表來存儲公約數(shù) f = [] # 遍歷從1到smaller的所有整數(shù) for i in range(1, smaller + 1): # 檢查當前的整數(shù)是否能同時被 m 和 n 整除 if m % i == 0 and n % i == 0: # 如果可以,將這個整數(shù)添加到列表 f 中 f.append(i) # 返回列表 f 中的最大值,即最大公約數(shù) return max(f) # 調(diào)用函數(shù)并打印返回的最大公約數(shù) # 示例:計算 12 和 36 的最大公約數(shù) print("%d是最大公約數(shù)" % f2(12, 36))
方法3(輾轉相除法)
代碼思路:
- 輸入檢查與調(diào)整:
- 函數(shù)
f1
接收兩個整數(shù)m
和n
作為輸入。 - 為了確保
m
不小于n
,若m
小于n
,則兩者進行交換。
- 函數(shù)
- 計算最大公約數(shù):
- 使用
while
循環(huán),條件是n
不為0。 - 在循環(huán)內(nèi)部,利用元組解包同時更新
m
和n
的值:m
被賦值為當前的n
,而n
被賦值為m % n
(即m
除以n
的余數(shù))。 - 此過程會不斷迭代,直至
n
變?yōu)?。
- 使用
- 返回結果:
- 當
n
為0時,m
中存儲的即為所求的最大公約數(shù),函數(shù)返回m
。
- 當
def f3(m, n): # 若m小于n,則交換m和n的值,確保m不小于n(此步驟可選) if m < n: m, n = n, m # 利用元組解包進行值交換 # 當n不為0時,持續(xù)進行循環(huán)計算 while n: # 利用元組解包同時更新m和n的值 # m被更新為當前的n,n被更新為m除以n的余數(shù) m, n = n, m % n # 當n為0時,m即為所求的最大公約數(shù) return m # 調(diào)用函數(shù)f3,并打印出12和24的最大公約數(shù) print(f3(12, 24)) # 輸出結果應為12
方法4
在Python中,math
模塊提供了一個名為gcd
的函數(shù),該函數(shù)能夠高效地計算出兩個或多個整數(shù)的最大公約數(shù)(GCD, Greatest Common Divisor)
import math # 調(diào)用math.gcd函數(shù)計算3139和2117的最大公約數(shù) result = math.gcd(3139, 2117) # 打印結果 print(result)
總結
到此這篇關于Python求最小公倍數(shù)與最大公約數(shù)的文章就介紹到這了,更多相關Python求最小公倍數(shù)與最大公約數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python實現(xiàn)通過pil模塊對圖片格式進行轉換的方法
這篇文章主要介紹了python實現(xiàn)通過pil模塊對圖片格式進行轉換的方法,涉及Python中pil模塊的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03使用Python快速搭建HTTP服務和文件共享服務的實例講解
今天小編就為大家分享一篇使用Python快速搭建HTTP服務和文件共享服務的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06python_tkinter彈出對話框創(chuàng)建2
這篇文章主要介紹了python_tkinter彈出對話框創(chuàng)建,上以篇文章我們簡單的對對話框創(chuàng)建做了簡單介紹,本文將繼續(xù)更多相關內(nèi)容,需要的小伙伴可以參考一下2022-03-03