ต่อไปนี้คือคำอธิบายเกี่ยวกับวิธีการคำนวณและรับตัวหารร่วมมากและตัวคูณร่วมน้อยใน Python
- ตัวหารร่วมมากที่สุดและตัวคูณร่วมน้อยของจำนวนเต็มสองตัว
- ตัวหารร่วมมากที่สุดและตัวคูณร่วมน้อยของจำนวนเต็มสามตัวขึ้นไป
โปรดทราบว่าข้อกำหนดของฟังก์ชันที่มีให้ในไลบรารีมาตรฐานจะแตกต่างกันไปตามเวอร์ชันของ Python ตัวอย่างการใช้งานฟังก์ชันที่ไม่ได้อยู่ในไลบรารีมาตรฐานยังแสดงอยู่ในบทความนี้
- Python 3.4 หรือเก่ากว่า
- GCD:
fractions.gcd()
(เพียงสองอาร์กิวเมนต์)
- GCD:
- Python 3.5 หรือใหม่กว่า
- GCD:
math.gcd()
(เพียงสองอาร์กิวเมนต์)
- GCD:
- Python 3.9 หรือใหม่กว่า
- GCD:
math.gcd()
(รองรับมากกว่าสามอาร์กิวเมนต์) - ตัวส่วนร่วมน้อยที่สุด:
math.lcm()
(รองรับมากกว่าสามอาร์กิวเมนต์)
- GCD:
ที่นี่เราอธิบายวิธีการโดยใช้ไลบรารี Python มาตรฐาน สามารถใช้ NumPy เพื่อคำนวณตัวหารร่วมที่มากที่สุดและตัวคูณร่วมน้อยน้อยที่สุดสำหรับแต่ละองค์ประกอบของอาร์เรย์หลายตัว
ตัวหารร่วมมากที่สุดและตัวคูณร่วมน้อยของจำนวนเต็มสองตัว
GCD
ตั้งแต่ Python 3.5 มีฟังก์ชัน gcd() ในโมดูลคณิตศาสตร์ gcd() เป็นตัวย่อสำหรับ
- greatest common divisor
ส่งกลับตัวหารร่วมมากของจำนวนเต็มที่ระบุในอาร์กิวเมนต์
import math
print(math.gcd(6, 4))
# 2
โปรดทราบว่าใน Python 3.4 และรุ่นก่อนหน้า ฟังก์ชัน gcd() อยู่ในโมดูลเศษส่วน ไม่ใช่โมดูลคณิตศาสตร์ ต้องนำเข้าเศษส่วนและเศษส่วน.gcd()
ตัวส่วนร่วมน้อยที่สุด
เพิ่มฟังก์ชัน lcm() ซึ่งคืนค่าตัวคูณร่วมน้อยในโมดูลคณิตศาสตร์ใน Python 3.9 lcm เป็นตัวย่อสำหรับ
- least common multiple
ส่งกลับผลคูณร่วมน้อยของจำนวนเต็มที่ระบุในอาร์กิวเมนต์
print(math.lcm(6, 4))
# 12
ก่อนหน้า Python 3.8 จะไม่มีการจัดเตรียม lcm() แต่สามารถคำนวณได้อย่างง่ายดายโดยใช้ gcd()
lcm(a, b) = a * b / gcd(a, b)
ตัวอย่างการใช้งาน
def my_lcm(x, y):
return (x * y) // math.gcd(x, y)
print(my_lcm(6, 4))
# 12
/
เนื่องจากสิ่งนี้ส่งผลให้เกิดทศนิยมทศนิยม แบ็กสแลชสองอันจึงถูกใช้เพื่อตัดจุดทศนิยมและส่งคืนผลลัพธ์การหารจำนวนเต็ม โปรดทราบว่าไม่มีการประมวลผลใดเพื่อพิจารณาว่าอาร์กิวเมนต์เป็นจำนวนเต็มหรือไม่
ตัวหารร่วมมากที่สุดและตัวคูณร่วมน้อยของจำนวนเต็มสามตัวขึ้นไป
Python 3.9 หรือใหม่กว่า
เริ่มต้นด้วย Python 3.9 ฟังก์ชันทั้งหมดต่อไปนี้รองรับอาร์กิวเมนต์มากกว่าสามอาร์กิวเมนต์
math.gcd()
math.lcm()
print(math.gcd(27, 18, 9))
# 9
print(math.gcd(27, 18, 9, 3))
# 3
print(math.lcm(27, 9, 3))
# 27
print(math.lcm(27, 18, 9, 3))
# 54
*
หากคุณต้องการคำนวณตัวหารร่วมมากหรือผลคูณร่วมน้อยขององค์ประกอบของรายการ ให้ระบุอาร์กิวเมนต์ด้วยสิ่งนี้
l = [27, 18, 9, 3]
print(math.gcd(*l))
# 3
print(math.lcm(*l))
# 54
Python 3.8 หรือเก่ากว่า
ก่อนหน้า Python 3.8 ฟังก์ชัน gcd() รองรับเพียงสองอาร์กิวเมนต์
ในการหาตัวหารร่วมมากหรือผลคูณร่วมน้อยของจำนวนเต็มสามตัวขึ้นไป ไม่จำเป็นต้องใช้อัลกอริธึมที่ซับซ้อนเป็นพิเศษ เพียงคำนวณตัวหารร่วมมากหรือตัวคูณร่วมน้อยสำหรับแต่ละค่าหลายค่าโดยใช้ฟังก์ชันลำดับที่สูงกว่า reduce()
GCD
from functools import reduce
def my_gcd(*numbers):
return reduce(math.gcd, numbers)
print(my_gcd(27, 18, 9))
# 9
print(my_gcd(27, 18, 9, 3))
# 3
l = [27, 18, 9, 3]
print(my_gcd(*l))
# 3
ย้ำอีกครั้งว่าก่อน Python 3.4 ฟังก์ชัน gcd() อยู่ในโมดูลเศษส่วน ไม่ใช่โมดูลคณิตศาสตร์
ตัวส่วนร่วมน้อยที่สุด
def my_lcm_base(x, y):
return (x * y) // math.gcd(x, y)
def my_lcm(*numbers):
return reduce(my_lcm_base, numbers, 1)
print(my_lcm(27, 9, 3))
# 27
print(my_lcm(27, 18, 9, 3))
# 54
l = [27, 18, 9, 3]
print(my_lcm(*l))
# 54