Египетская дробь была записана как сумма дробных единиц, то есть числитель всегда равен 1; кроме того, никакие два знаменателя не могут быть одинаковыми. Самый простой способ создать египетскую дробь - многократно брать наибольшую подходящую дробную единицу, вычитать, чтобы найти то, что осталось, и повторять до тех пор, пока остаток не станет дробной, например:
- 7, деленное на 15, меньше 1/2, но больше 1/3, поэтому первая единица
дробь 1/3, а первый остаток 2/15.
- Тогда 2/15 меньше 1/7, но больше 1/8, поэтому вторая единица дроби
составляет 1/8, а второй остаток составляет 1/120.
- Это в виде единицы, поэтому мы закончили:
7 ÷ 15 = 1/3 + 1/8 + 1/120
Я пытаюсь решить проблему египетской дроби, где я использую жадный метод, приведенный ниже:
def egyptianFraction(nr, dr):
print("The Egyptian Fraction " +
"Representation of {0}/{1} is".
format(nr, dr), end="\n")
# empty list ef to store
# denominator
ef = []
# while loop runs until
# fraction becomes 0 i.e,
# numerator becomes 0
while nr != 0:
# taking ceiling
x = math.ceil(dr / nr)
# storing value in ef list
ef.append(x)
# updating new nr and dr
nr = x * nr - dr
dr = dr * x
# printing the values
for i in range(len(ef)):
if i != len(ef) - 1:
print(" 1/{0} +" .
format(ef[i]), end = " ")
else:
print(" 1/{0}" .
format(ef[i]), end = " ")
# calling the function
egyptianFraction(6, 14)
Мне нужно построить алгоритм, который гарантирует максимальное количество терминов или минимальный наибольший знаменатель; например,
5 ÷ 121 = 1/25 + 1/757 + 1/763309 + 1/873960180913 +
1/1527612795642093418846225
but a simpler rendering of the same number is
1/33 + 1/121 + 1/363.