Tính toán và nhận ước số chung lớn nhất và bội số chung nhỏ nhất trong Python

Kinh doanh

Sau đây là mô tả về cách tính toán và lấy ước số chung lớn nhất và bội số chung nhỏ nhất trong Python.

  • Ước chung lớn nhất và bội chung nhỏ nhất của hai số nguyên
  • Ước chung lớn nhất và bội chung nhỏ nhất của ba hoặc nhiều số nguyên

Lưu ý rằng thông số kỹ thuật của các hàm được cung cấp trong thư viện tiêu chuẩn khác nhau tùy thuộc vào phiên bản Python. Một ví dụ về triển khai một hàm không có trong thư viện chuẩn cũng được hiển thị trong bài viết này.

  • Python 3.4 trở lên
    • GCD:fractions.gcd()(chỉ có hai đối số)
  • Python 3.5 trở lên
    • GCD:math.gcd()(chỉ có hai đối số)
  • Python 3.9 trở lên
    • GCD:math.gcd()(hỗ trợ nhiều hơn ba đối số)
    • mẫu số chung nhỏ nhất:math.lcm()(hỗ trợ nhiều hơn ba đối số)

Ở đây chúng tôi giải thích phương pháp sử dụng thư viện Python chuẩn; NumPy có thể dễ dàng được sử dụng để tính ước số chung lớn nhất và bội số chung nhỏ nhất cho mỗi phần tử của nhiều mảng.

Ước chung lớn nhất và bội chung nhỏ nhất của hai số nguyên

GCD

Kể từ Python 3.5, có một hàm gcd () trong mô-đun toán học. gcd () là từ viết tắt của

  • greatest common divisor

Trả về ước số chung lớn nhất của số nguyên được chỉ định trong đối số.

import math

print(math.gcd(6, 4))
# 2

Lưu ý rằng trong Python 3.4 trở về trước, hàm gcd () nằm trong mô-đun phân số, không phải mô-đun toán học. phải nhập phân số và phân số.gcd ().

mẫu số chung nhỏ nhất

Hàm lcm (), trả về bội số chung nhỏ nhất, đã được thêm vào mô-đun toán học trong Python 3.9. lcm là từ viết tắt của

  • least common multiple

Trả về bội số chung nhỏ nhất của số nguyên được chỉ định trong đối số.

print(math.lcm(6, 4))
# 12

Trước Python 3.8, lcm () không được cung cấp, nhưng có thể dễ dàng tính toán bằng cách sử dụng gcd ().

lcm(a, b) = a * b / gcd(a, b)

Ví dụ thực hiện.

def my_lcm(x, y):
    return (x * y) // math.gcd(x, y)

print(my_lcm(6, 4))
# 12

/Vì điều này dẫn đến dấu phẩy thập phân, hai dấu gạch chéo ngược được sử dụng để cắt ngắn dấu thập phân và trả về kết quả chia số nguyên. Lưu ý rằng không có quá trình xử lý nào được thực hiện để xác định xem đối số có phải là số nguyên hay không.

Ước chung lớn nhất và bội chung nhỏ nhất của ba hoặc nhiều số nguyên

Python 3.9 trở lên

Bắt đầu với Python 3.9, tất cả các hàm sau hỗ trợ nhiều hơn ba đối số.

  • 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

*Nếu bạn muốn tính ước số chung lớn nhất hoặc bội số chung nhỏ nhất của các phần tử của danh sách, hãy chỉ định đối số với giá trị này.

l = [27, 18, 9, 3]
print(math.gcd(*l))
# 3

print(math.lcm(*l))
# 54

Python 3.8 trở xuống

Trước Python 3.8, hàm gcd () chỉ hỗ trợ hai đối số.

Để tìm ước chung lớn nhất hoặc bội chung nhỏ nhất của ba hoặc nhiều số nguyên, không cần thuật toán đặc biệt phức tạp; chỉ cần tính ước số chung lớn nhất hoặc bội số chung nhỏ nhất cho từng giá trị trong số các bội số lần lượt bằng cách sử dụng hàm bậc cao 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

Một lần nữa, lưu ý rằng trước Python 3.4, hàm gcd () nằm trong mô-đun phân số, không phải mô-đun toán học.

mẫu số chung nhỏ nhất

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