Төменде 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