题解 | 将真分数分解为埃及分数

a, b = map(int, input().split('/'))
ans = []

def get_ans(a, b):
    if b%a == 0:
        ans.append(f'1/{b//a}')
    else:
        # 找出最接近当前分数且小于该分数的1/x
        # a/b变成1/?的形式直接用b/a即1/(b/a),因为要保证该值小于a/b,所以将分母向上取整
        x = b//a + 1
        ans.append(f'1/{x}')
        # 递归继续分解a/b-1/x
        get_ans(a*x-b, b*x)
        # 因为x为b/a向上取整,所以b/a < x < b/a + 1,所以0<ax-b<a,又因为ax-b始终为整数
        # 所以递推式中的a(分子)会严格单调递减,最终为1,算法时间复杂度为O(a)

get_ans(a, b)
print('+'.join(ans))

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务