有没有办法重写math.ceil函数

时间:2019-04-15 18:11:09

标签: python-3.x math greedy ceiling floor-division

对于此功能,我必须使用贪婪算法找到所有加起来构成分数的“埃及分数”。所有埃及分数均具有1的分子值,它们是不同的,并且sum =(分子/分母)。我知道如何使用除法和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 个答案:

答案 0 :(得分:2)

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