Есть ли способ переписать функцию math.ceil
Для этой функции я должен найти все "египетские дроби", которые складываются в дробь, используя жадный алгоритм. Все египетские дроби имеют значение числителя 1, они различны, а сумма = (числитель / знаменатель). Я понимаю, как найти один, используя Division и math.ceil. Тем не менее, кажется, что функция никогда не разрешается после того, как я попытаюсь со значениями числителя и знаменателя. Есть ли способ переписать мой код без деления (то есть без потолка, деления или пола), только умножением и вычитанием? Я могу предположить, что числитель всегда <знаменатель, и оба являются положительными целыми числами.
def egypt(numerator, denominator):
fracs = []
while numerator != 0:
n = int(numerator)
d = int(denominator)
c = math.ceil(d / n)
fracs.append(c)
n = (c*n) - d
d = c*d
return fracs
1 ответ
math.ceil
все в порядке. Проблема в том, что вы каждый раз заново инициализируете цикл. Вот фиксированная функция:
def egypt(numerator, denominator):
fracs = []
n = int(numerator)
d = int(denominator)
while n != 0:
c = math.ceil(d / n)
fracs.append(c)
n = (c*n) - d
d = c*d
return fracs