В данном уроке мы узнаем, как найти наименьшее общее кратное (НОК) и наибольший общий делитель (НОД) с помощью языка программирования 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.8k4 золотых знака25 серебряных знаков66 бронзовых знаков
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
I’m trying to write a code that lets me find the first few multiples of a number. This is one of my attempts:
def printMultiples(n, m):
for m in (n,m):
print(n, end = ' ')
I figured out that, by putting for m in (n, m):
, it would run through the loop for whatever number was m
.
def printMultiples(n, m):
'takes n and m as integers and finds all first m multiples of n'
for m in (n,m):
if n % 2 == 0:
while n < 0:
print(n)
After multiple searches, I was only able to find a sample code in java, so I tried to translate that into python, but I didn’t get any results. I have a feeling I should be using the range()
function somewhere in this, but I have no idea where.
ivanleoncz
8,7706 gold badges56 silver badges48 bronze badges
asked Jan 27, 2013 at 23:01
2
If you’re trying to find the first count
multiples of m
, something like this would work:
def multiples(m, count):
for i in range(count):
print(i*m)
Alternatively, you could do this with range:
def multiples(m, count):
for i in range(0,count*m,m):
print(i)
Note that both of these start the multiples at 0
– if you wanted to instead start at m
, you’d need to offset it by that much:
range(m,(count+1)*m,m)
answered Jan 27, 2013 at 23:05
AmberAmber
503k82 gold badges625 silver badges550 bronze badges
1
Does this do what you want?
print range(0, (m+1)*n, n)[1:]
For m=5, n=20
[20, 40, 60, 80, 100]
Or better yet,
>>> print range(n, (m+1)*n, n)
[20, 40, 60, 80, 100]
For Python3+
>>> print(list(range(n, (m+1)*n, n)))
[20, 40, 60, 80, 100]
answered Jan 27, 2013 at 23:04
sberrysberry
127k18 gold badges136 silver badges165 bronze badges
4
Based on mathematical concepts, I understand that:
- all natural numbers that, divided by
n
, having0
as remainder, are all multiples ofn
Therefore, the following calculation also applies as a solution (multiples between 1 and 100):
>>> multiples_5 = [n for n in range(1, 101) if n % 5 == 0]
>>> multiples_5
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
For further reading:
- https://www.mathsisfun.com/definitions/natural-number.html
- https://www.mathwizz.com/arithmetic/help/help9.htm
- https://www.calculatorsoup.com/calculators/math/multiples.php
answered Jan 23, 2019 at 16:43
ivanleonczivanleoncz
8,7706 gold badges56 silver badges48 bronze badges
For the first ten multiples of 5, say
>>> [5*n for n in range(1,10+1)]
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
answered Jan 27, 2013 at 23:18
Colonel PanicColonel Panic
132k85 gold badges399 silver badges461 bronze badges
1
You can do:
def mul_table(n,i=1):
print(n*i)
if i !=10:
mul_table(n,i+1)
mul_table(7)
double-beep
4,96617 gold badges32 silver badges41 bronze badges
answered May 29, 2019 at 14:13
If this is what you are looking for –
To find all the multiples between a given number and a limit
def find_multiples(integer, limit):
return list(range(integer,limit+1, integer))
This should return –
Test.assert_equals(find_multiples(5, 25), [5, 10, 15, 20, 25])
answered Jul 26, 2020 at 8:31
era5toneera5tone
5514 silver badges14 bronze badges
Another method that can be done is trying to make a list. Here’s my example for getting the first 20 multiples of 7.
Input:
multiples_7 = [x * 7 for x in range(1,21)]
print(multiples_7)
Output:
[7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140]
eyllanesc
233k19 gold badges161 silver badges234 bronze badges
answered Sep 24, 2021 at 5:07
def multiples(n,m,starting_from=1,increment_by=1):
"""
# Where n is the number 10 and m is the number 2 from your example.
# In case you want to print the multiples starting from some other number other than 1 then you could use the starting_from parameter
# In case you want to print every 2nd multiple or every 3rd multiple you could change the increment_by
"""
print [ n*x for x in range(starting_from,m+1,increment_by) ]
answered Jan 18, 2017 at 15:59
For first 10 multiples of 5 you can do as
import numpy as np
#np.arange(1,11) array from 1 to 10
array_multipleof5 = [5*n for n in np.arange(1,11)]
array_multipleof5 = np.array(array_multipleof5)
print(array_multipleof5)
answered Aug 2, 2021 at 23:37
How to calculate the first n multiples of a given number x, in the compact python’s lambda notation
n_multiples_of_x = lambda n,x : list( range(x, x*n + 1, x) )
Tests:
assert n_multiples_of_x(5, 5) == [5, 10, 15, 20, 25]
answered May 15, 2022 at 15:28
Наименьшее общее кратное
Написать функцию, которая вычисляет наименьшее общее кратное (НОК) пары чисел по формуле
НОК = ab / НОД(a, b),
где a и b – это натуральные числа, НОД – наибольший общий делитель.
Решение задачи на языке программирования Python
Из условия задачи ясно, чтобы найти НОК, надо сначала найти НОД. Последний можно вычислить, постепенно находя остаток от деления большего числа из пары на меньшее и присваивая остаток переменной, связанной с большим числом (см. алгоритм Евклида). В какой-то момент значение одной из переменных станет равным 0. Когда это произойдет, другая будет содержать НОД. Если неизвестно, какая именно переменная содержит НОД, то можно просто сложить значения обоих переменных.
В коде ниже используется функция для нахождения НОК, которая принимает два числа и возвращает найденное наименьшее общее кратное.
В основной ветке программы функция вызывается в цикле, который завершается, если то, что было введено, нельзя преобразовать к целому. В этом случае генерируется исключение и поток выполнения переходит к ветке except
.
def lcm(a, b): m = a * b while a != 0 and b != 0: if a > b: a %= b else: b %= a return m // (a + b) while 1: try: x = int(input('a = ')) y = int(input('b = ')) print('НОК:', lcm(x, y)) except ValueError: break
Пример выполнения:
a = 14 b = 18 НОК: 126 a = 105 b = 305 НОК: 6405 a = stop
В модуле math
языка программирования Python есть функция для нахождения наибольшего общего делителя (gcd
– greatest common devisor). При ее использовании наша функция вычисления наименьшего общего кратного lcm
(least common multiple) упрощается.
def lcm(a, b): import math return (a * b) // math.gcd(a, b)
Больше задач в PDF
Катя узнала, что ей для сна надо XX минут. В отличие от Коли, Катя ложится спать после полуночи в HH часов и MM минут. Помогите Кате определить, на какое время ей поставить будильник, чтобы он прозвенел ровно через XX минут после того, как она ляжет спать.
На стандартный ввод, каждое в своей строке, подаются значения XX, HH и MM. Гарантируется, что Катя должна проснуться в тот же день, что и заснуть. Программа должна выводить время, на которое нужно поставить будильник: в первой строке часы, во второй — минуты.
Кликните здесь для просмотра всего текста
Sample Input 1:
480
1
2
Sample Output 1:
9
2
Sample Input 2:
475
1
55
Sample Output 2:
9
50
Python | ||
|
вообщем у меня вопрос. как на языке сформулировать: если X не кратно 60 тоглда принт М