Kira dan dapatkan pembahagi sepunya terbesar dan gandaan sepunya terkecil dalam Python

Perniagaan

Berikut ialah penerangan tentang cara mengira dan mendapatkan pembahagi sepunya terbesar dan gandaan sepunya terkecil dalam Python.

  • Pembahagi sepunya terbesar dan gandaan sepunya terkecil bagi dua integer
  • Pembahagi sepunya terbesar dan gandaan sepunya terkecil bagi tiga atau lebih integer

Ambil perhatian bahawa spesifikasi fungsi yang disediakan dalam perpustakaan standard berbeza bergantung pada versi Python. Contoh pelaksanaan fungsi yang tiada dalam pustaka standard juga ditunjukkan dalam artikel ini.

  • Python 3.4 atau lebih awal
    • GCD:fractions.gcd()(hanya dua hujah)
  • Python 3.5 atau lebih baru
    • GCD:math.gcd()(hanya dua hujah)
  • Python 3.9 atau lebih baru
    • GCD:math.gcd()(menyokong lebih daripada tiga hujah)
    • penyebut biasa terkecil:math.lcm()(menyokong lebih daripada tiga hujah)

Di sini kami menerangkan kaedah menggunakan perpustakaan Python standard; NumPy boleh digunakan dengan mudah untuk mengira pembahagi sepunya terbesar dan gandaan sepunya terkecil untuk setiap elemen berbilang tatasusunan.

Pembahagi sepunya terbesar dan gandaan sepunya terkecil bagi dua integer

GCD

Sejak Python 3.5, terdapat fungsi gcd() dalam modul matematik. gcd() ialah akronim untuk

  • greatest common divisor

Mengembalikan pembahagi sepunya terbesar bagi integer yang dinyatakan dalam hujah.

import math

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

Ambil perhatian bahawa dalam Python 3.4 dan lebih awal, fungsi gcd() berada dalam modul pecahan, bukan modul matematik. pecahan mesti diimport dan fractions.gcd().

penyebut biasa terkecil

Fungsi lcm(), yang mengembalikan gandaan sepunya terkecil, telah ditambahkan pada modul matematik dalam Python 3.9. lcm ialah akronim untuk

  • least common multiple

Mengembalikan gandaan sepunya terkecil bagi integer yang dinyatakan dalam hujah.

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

Sebelum Python 3.8, lcm() tidak disediakan, tetapi boleh dikira dengan mudah menggunakan gcd().

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

Contoh Perlaksanaan.

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

print(my_lcm(6, 4))
# 12

/Oleh kerana ini menghasilkan apungan perpuluhan, dua garis miring ke belakang digunakan untuk memotong titik perpuluhan dan mengembalikan hasil pembahagian integer. Ambil perhatian bahawa tiada pemprosesan dilakukan untuk menentukan sama ada hujah adalah integer atau tidak.

Pembahagi sepunya terbesar dan gandaan sepunya terkecil bagi tiga atau lebih integer

Python 3.9 atau lebih baru

Bermula dengan Python 3.9, semua fungsi berikut menyokong lebih daripada tiga hujah.

  • 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

*Jika anda ingin mengira pembahagi sepunya terbesar atau gandaan sepunya terkecil bagi elemen senarai, nyatakan hujah dengan ini.

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

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

Python 3.8 atau lebih awal

Sebelum Python 3.8, fungsi gcd() hanya menyokong dua argumen.

Untuk mencari pembahagi sepunya terbesar atau gandaan sepunya terkecil bagi tiga atau lebih integer, tiada algoritma yang sangat rumit diperlukan; hanya hitung pembahagi sepunya terbesar atau gandaan sepunya terkecil untuk setiap nilai berbilang seterusnya menggunakan fungsi tertib tinggi 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

Sekali lagi, ambil perhatian bahawa sebelum Python 3.4, fungsi gcd() berada dalam modul pecahan, bukan modul matematik.

penyebut biasa terkecil

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