Есть ли способ переписать функцию 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
Другие вопросы по тегам