Помогите написать программу, которая помогает найти это число
Помогите решить задачу со Stepik. Лучше не решать, а подсказать и указать на ошибки. В Институте биоинформатики между информатиками и биологами устраивается соревнование. Победителям соревнования достанется большой и вкусный пирог. В команде биологов a человек, а в команде информатиков — b человек.
Нужно заранее разрезать пирог таким образом, чтобы можно было раздать кусочки пирога любой команде, выигравшей соревнование, при этом каждому участнику этой команды должно достаться одинаковое число кусочков пирога. И так как не хочется резать пирог на слишком мелкие кусочки, нужно найти минимальное подходящее число.
Напишите программу, которая помогает найти это число. Программа должна считывать размеры команд (два положительных целых числа a и b, каждое число вводится на отдельной строке) и выводить наименьшее число d, которое делится на оба этих числа без остатка.
a = int(input())
b = int(input())
d = 0
while d % a == 0 and d % b == 0:
d += 1
print(d)
Ответы (1 шт):
У вас условие неверно задано - нужно увеличивать d, пока оно не станет кратным обоим числам, например, так модифицировать ваш код:
d = 1
while not (d % a == 0 and d % b == 0):
d += 1
или так (более ясно читается):
d = 1
while (d % a) or (d % b):
d += 1
Однако правильно (и для больших чисел этого не избежать) использовать алгоритм нахождения наименьшего общего кратного (НОК) - в школе ведь изучали?
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
def lcm(a, b):
return (a * b) // gcd(a, b)
a = 6
b = 9
print(lcm(a, b))