Дараах нь 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() функц нь математикийн модульд биш харин бутархайн модульд байгааг анхаарна уу. бутархайг импортлох ёстой ба fractions.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() функц нь зөвхөн хоёр аргументыг дэмждэг байсан.
Гурав ба түүнээс дээш бүхэл тооны хамгийн их нийтлэг хуваагч эсвэл хамгийн бага нийтлэг үржвэрийг олохын тулд нарийн төвөгтэй алгоритм шаардлагагүй; Зөвхөн дээд эрэмбийн функцийг бууруулах() ашиглан олон утга тус бүрийн хамгийн их нийтлэг хуваагч эсвэл хамгийн бага нийтлэг үржвэрийг тооцоолоход хангалттай.
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