คำนวณและรับตัวหารร่วมมากสุดและตัวคูณร่วมน้อยใน Python

ธุรกิจ

ต่อไปนี้คือคำอธิบายเกี่ยวกับวิธีการคำนวณและรับตัวหารร่วมมากและตัวคูณร่วมน้อยใน Python

  • ตัวหารร่วมมากที่สุดและตัวคูณร่วมน้อยของจำนวนเต็มสองตัว
  • ตัวหารร่วมมากที่สุดและตัวคูณร่วมน้อยของจำนวนเต็มสามตัวขึ้นไป

โปรดทราบว่าข้อกำหนดของฟังก์ชันที่มีให้ในไลบรารีมาตรฐานจะแตกต่างกันไปตามเวอร์ชันของ Python ตัวอย่างการใช้งานฟังก์ชันที่ไม่ได้อยู่ในไลบรารีมาตรฐานยังแสดงอยู่ในบทความนี้

  • Python 3.4 หรือเก่ากว่า
    • GCD:fractions.gcd()(เพียงสองอาร์กิวเมนต์)
  • Python 3.5 หรือใหม่กว่า
    • GCD:math.gcd()(เพียงสองอาร์กิวเมนต์)
  • Python 3.9 หรือใหม่กว่า
    • GCD:math.gcd()(รองรับมากกว่าสามอาร์กิวเมนต์)
    • ตัวส่วนร่วมน้อยที่สุด:math.lcm()(รองรับมากกว่าสามอาร์กิวเมนต์)

ที่นี่เราอธิบายวิธีการโดยใช้ไลบรารี 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