题解 | #将真分数分解为埃及分数# 不取巧也没有公式的硬做
将真分数分解为埃及分数
https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b
分母分解成因子后 取其中的一些数 使它们的和等于分子即可
算因子和这里用例dfs回溯 特别注意要新传一个num_re = [i for i in nums] num_re.remove(x)
因为回溯很重要的是要还原 nums 不能对nums进行改动
while True:
try:
# 因子分解
def div(n):
out = [1]
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
out.extend([i, n // i])
return out
# 数字合成
def sum_div(nums, target, out):
if target == 0:
res.append(out)
return True
if target < 0 or sum(nums) < target:
return False
flag = False
if nums:
for x in nums:
num_re = [i for i in nums]
num_re.remove(x)
if sum_div(num_re, target - x, out + [x]):
flag = True
break
return flag
res = []
x1, x2 = map(int, input().split("/"))
i = 0
while not res:
i += 1
divs = div(x2 * i)
target = x1 * i
if sum_div(divs, target, []):
break
out_res = ["1/" + str(x2 * i // d) for d in res[0]]
print("+".join(out_res))
except:
break
