В данном уроке мы узнаем, как найти наименьшее общее кратное (НОК) и наибольший общий делитель (НОД) с помощью языка программирования Python.
Но прежде чем мы начнем, давайте разберем, что обозначает Least Common Multiple (LCM) — наименьшее общее кратное.
НОК: наименьшее общее кратное
Это понятие арифметики и системы счисления. НОК двух целых чисел a и b обозначается НОК(a,b). Это наименьшее натуральное число, которое делится и на «а», и на «b».
Например: у нас есть два целых числа 4 и 6. Найдем НОК:
- Кратные 4:
4, 8, 12, 16, 20, 24, 28, 32, 36,... and so on...
- Кратные 6:
6, 12, 18, 24, 30, 36, 42,... and so on....
Общие кратные 4 и 6 — это просто числа, которые есть в обоих списках:
12, 24, 36, 48, 60, 72,.... and so on....
НОК — это наименьший общий множитель, поэтому он равен 12.
Поскольку мы поняли основную концепцию НОК, давайте рассмотрим следующую программу для нахождения НОК заданных целых чисел.
Пример:
# defining a function to calculate LCM def calculate_lcm(x, y): # selecting the greater number if x > y: greater = x else: greater = y while(True): if((greater % x == 0) and(greater % y == 0)): lcm = greater break greater += 1 return lcm # taking input from users num1 = int(input("Enter first number: ")) num2 = int(input("Enter second number: ")) # printing the result for the users print("The L.C.M. of", num1,"and", num2,"is", calculate_lcm(num1, num2))
Выход:
Enter first number: 3 Enter second number: 4 The L.C.M. of 3 and 4 is 12
Объяснение:
Эта программа сохраняет два числа в num1 и num2 соответственно. Эти числа передаются в функцию calculate_lcm(). Функция возвращает НОК двух чисел.
Внутри функции мы сначала определили большее из двух чисел, поскольку наименьшее общее кратное может быть больше или равно наибольшему числу. Затем мы используем бесконечный цикл while, чтобы перейти от этого числа и дальше.
На каждой итерации мы проверяли, идеально ли делят оба числа число. Если это так, мы сохранили число как НОК и вышли из цикла. В противном случае число увеличивается на 1, и цикл продолжается.
НОД: наибольший общий делитель
В этом разделе мы разберем, как найти Highest Common Factor (HCF) — наибольший общий делитель (НОД) в языке программирования Python.
Наибольший общий делитель двух или более целых чисел, когда хотя бы одно из них не равно нулю, является наибольшим положительным целым числом, которое без остатка делит целые числа. Например, НОД 8 и 12 равен 4.
Например:
У нас есть два целых числа 8 и 12. Найдем наибольший общий делитель.
- Делители числа 8:
1, 2, 4, 8
- Делители числа 12:
1, 2, 3, 4, 6, 12
НОД 8 и 12 равны 4.
Теперь давайте рассмотрим пример, основанный на нахождении НОД двух заданных чисел.
Пример:
# defining a function to calculate HCF def calculate_hcf(x, y): # selecting the smaller number if x > y: smaller = y else: smaller = x for i in range(1,smaller + 1): if((x % i == 0) and(y % i == 0)): hcf = i return hcf # taking input from users num1 = int(input("Enter first number: ")) num2 = int(input("Enter second number: ")) # printing the result for the users print("The H.C.F. of", num1,"and", num2,"is", calculate_hcf(num1, num2))
Выход:
Enter first number: 8 Enter second number: 12 The H.C.F. of 8 and 12 is 4
Объяснение:
В приведенном выше фрагменте кода два целых числа, хранящиеся в переменных num1 и num2, передаются в функцию calculate_hcf(). Функция вычисляет НОД для этих двух чисел и возвращает его.
Внутри функции мы должны определить меньшее число, поскольку НОД может быть меньше или равен наименьшему числу. Затем мы использовали цикл for, чтобы перейти от 1 к этому числу.
На каждой итерации мы должны проверять, точно ли число делит оба входных числа. Если это так, мы должны сохранить число как НОД. По завершении цикла мы получаем наибольшее число, которое идеально делит оба числа.
1196-1017cookie-checkНахождение НОК и НОД в Python — примеры
Как найти НОК или НОД в python 3.9 в списке из n кол-ва чисел? (Ввод чисел пользователем)
(н: math.gcd([1 , 2 , 3])
задан 26 окт 2021 в 16:22
4
список из нескольких чисел можно получить следующим образом:
data = list(map(int, input().split()))
весь код таким образом будет выглядеть так:
import math
data = list(map(int, input().split()))
gcd = math.gcd(*data)
lcm = math.lcm(*data)
print(gcd, lcm)
ответ дан 26 окт 2021 в 16:42
ZhiharZhihar
36.9k4 золотых знака25 серебряных знаков67 бронзовых знаков
1
print ('a = ', end = '')
a = int (input ())
print ('b = ', end = '')
b = int (input ())
p = a * b
while a != 0 and b != 0:
if a > b:
a = a % b
else:
b = b % a
nod = a + b
nok = p // nod
print ('GCD:', nok)
print ('LDM:', nod)
ответ дан 26 окт 2021 в 16:29
2
Ниже описано, как вычислить и получить наибольший общий делитель и наименьшее общее кратное в 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 можно легко использовать для вычисления наибольшего общего делителя и наименьшего общего кратного для каждого элемента нескольких массивов.
Table of Contents
- Наибольший общий делитель и наименьшее общее кратное двух целых чисел
- GCD
- наименьший общий знаменатель
- Наибольший общий делитель и наименьшее общее кратное трех или более целых чисел
- Python 3.9 или более поздняя версия
- Python 3.8 или более ранняя версия
- GCD
- наименьший общий знаменатель
Наибольший общий делитель и наименьшее общее кратное двух целых чисел
GCD
Начиная с Python 3.5, в математическом модуле появилась функция gcd(). gcd() — это аббревиатура, означающая
- greatest common divisor
- math.gcd() — Mathematical functions — Python 3.10.2 Documentation
Возвращает наибольший общий делитель целого числа, указанного в аргументе.
import math
print(math.gcd(6, 4))
# 2
Обратите внимание, что в Python 3.4 и более ранних версиях функция gcd() находится в модуле fractions, а не в модуле math. fractions должен быть импортирован и fractions.gcd().
- fractions.gcd() — Rational numbers — Python 3.10.2 Documentation
наименьший общий знаменатель
Функция lcm(), которая возвращает наименьшее общее кратное, была добавлена в математический модуль в Python 3.9. lcm — это аббревиатура для
- least common multiple
- math.lcm() — Mathematical functions — Python 3.10.2 Documentation
Возвращает наименьшее общее кратное целого числа, указанного в аргументе.
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
*
Если вы хотите вычислить наибольший общий делитель или наименьшее общее кратное элементов списка, укажите аргумент this.
l = [27, 18, 9, 3]
print(math.gcd(*l))
# 3
print(math.lcm(*l))
# 54
Python 3.8 или более ранняя версия
До версии Python 3.8 функция gcd() поддерживала только два аргумента.
Чтобы найти наибольший общий делитель или наименьшее общее кратное трех или более целых чисел, не требуется особенно сложного алгоритма; достаточно вычислить наибольший общий делитель или наименьшее общее кратное для каждого из кратных значений по очереди с помощью функции высшего порядка reduce().
- functools — Higher-order functions and operations on callable objects — Python 3.10.2 Documentation
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() находилась в модуле fraction, а не в модуле math.
наименьший общий знаменатель
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
Вадим Тукаев 305 / 286 / 116 Регистрация: 23.01.2018 Сообщений: 933 |
||||
03.06.2020, 09:28 |
6 |
|||
а это программа или вызов библиотечной функции? Одна из особенностей подхода APL, точнее особенность мышления его создателей — это максимальная абстрактность, высокоуровневость, многофункциональность. Это позволяет выразить небольшим количеством функций очень много. Маленький пример. Возьмём три разные задачи: декодировать IP-адрес, перевести число в другую систему счисления, перевести количество секунд в часы, минуты, секунды. Обычный программист (как «обычный порошок» в рекламе) сделает три отдельные функции. Но если присмотреться, это одна и та же задача! Более того, такой оператор в APL уже встроен. Код 256 256 256 256⊤2130706433 127 0 0 1 2 2 2 2⊤10 1 0 1 0 24 60 60⊤10000 2 46 40 Так вот, в той программе из трёх символов «квадратик» — это ввод данных. А вот крышечка между ними — это же обычная конъюнкция! Точнее, это наибольшее общее кратное, но если применять его к числам 0 и 1, то получится конъюнкция. А дизъюнкция, соответственно — это частный случай наименьшего общего множителя для чисел 0 и 1. Так что, отвечая на Ваш вопрос, это не вызов библиотечной функции, это стандартный оператор этого языка. По-моему, это невероятно красиво! Код 0∨0 0 0∨1 1 1∨0 1 1∨1 1 25∨60 5 Кстати, в Python всё очень похоже.
1 |
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
In Python, math module contains a number of mathematical operations, which can be performed with ease using the module. math.gcd() function compute the greatest common divisor of 2 numbers mentioned in its arguments.
Syntax: math.gcd(x, y) Parameter: x : Non-negative integer whose gcd has to be computed. y : Non-negative integer whose gcd has to be computed. Returns: An absolute/positive integer value after calculating the GCD of given parameters x and y. Exceptions : When Both x and y are 0, function returns 0, If any number is a character, Type error is raised.
Time Complexity: O(1)
Auxiliary Space: O(1)
Code #1:
Python3
import
math
print
(
"The gcd of 60 and 48 is : "
, end
=
"")
print
(math.gcd(
60
,
48
))
Output:
The gcd of 60 and 48 is : 12
Code #2:
Python3
import
math
print
(
"math.gcd(44, 12) : "
, math.gcd(
44
,
12
))
print
(
"math.gcd(69, 23) : "
, math.gcd(
65
,
45
))
Output:
math.gcd(44, 12) : 4 math.gcd(69, 23) : 5
Code #3: Explaining Exception.
Python3
import
math
print
(
"The gcd of 0 and 0 is : "
, end
=
"")
print
(math.gcd(
0
,
0
))
print
(
"nThe gcd of a and 13 is : "
, end
=
"")
print
(math.gcd(
'a'
,
13
))
Output:
The gcd of 0 and 0 is : 0 The gcd of a and 13 is : TypeError: 'str' object cannot be interpreted as an integer
Last Updated :
20 Feb, 2023
Like Article
Save Article