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)
- GCD:
- Python 3.5 atau lebih baru
- GCD:
math.gcd()
(hanya dua hujah)
- GCD:
- Python 3.9 atau lebih baru
- GCD:
math.gcd()
(menyokong lebih daripada tiga hujah) - penyebut biasa terkecil:
math.lcm()
(menyokong lebih daripada tiga hujah)
- GCD:
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