Много лет назад, когда я учился в школе (а было это в застойные годы), на очередном скучном комсомольском собрании я придумал себе для развлечения математическую задачку - попробовать получить формулу для каждого числа от нуля до ста включительно путем расстановки знаков математических операций (плюс, минус, умножить, разделить) и скобок между цифрами номера моего комсомольского билета: 56279867. Поскольку наша школа была математической, а делать на собрании было больше нечего, к решению этой задачки подключились мои непосредственные соседи, которые сидели рядом со мной. Для некоторых чисел комбинации математических операций и скобок были получены достаточно быстро, например 5 + 6 + 2 + 7 + 9 + 8 + 6 + 7 = 50 или 5 + 6 + (2 + 7 + 9 - 8) * (6 - 7) = 1, однако для других чисел это оказалось не так просто. Более того, было неясно, имеет ли эта задача решение.
По прошествии долгого времени мне захотелось решить эту задачку. Для этого я создал программу на С++ и библиотеку работы с рациональными числами, которые можно найти здесь. Оказалось, что задача имеет решение, которое вы можете увидеть ниже:
(5 + (((6 + (2 + (7 - (9 + 8)))) * 6) + 7))=0 (5 + (6 + ((2 + (7 + (9 - 8))) * (6 - 7))))=1 ((5 + (((6 + (2 + (7 + 9))) / 8) + 6)) / 7)=2 (5 + (6 + (2 + (7 + ((9 + 8) * (6 - 7))))))=3 (5 + (6 + (2 + ((7 - (9 + (8 + 6))) + 7))))=4 (5 + (6 + (2 + ((7 + (9 - 8)) * (6 - 7)))))=5 (5 + (6 + (2 + ((7 - 9) + (8 - (6 + 7))))))=6 (5 + (((6 + (2 + (7 + 9))) / 8) + (6 - 7)))=7 (5 + (6 + (2 + (7 + (9 - (8 + (6 + 7)))))))=8 (5 + ((((6 + (2 + (7 + 9))) / 8) - 6) + 7))=9 (5 + (6 + (2 + (((7 + (9 + 8)) / 6) - 7))))=10 ((5 + (6 + (2 + (7 + (9 + (8 * 6)))))) / 7)=11 (5 + (6 + ((((2 + (7 - 9)) * 8) - 6) + 7)))=12 (5 + (6 + ((2 + (7 + (9 + 8))) / (6 + 7))))=13 ((5 + (6 + (2 + (7 + ((9 * 8) + 6))))) / 7)=14 (5 + (6 + (2 + ((7 + ((9 - 8) + 6)) / 7))))=15 (5 + (6 + (2 + ((((7 + 9) / 8) - 6) + 7))))=16 (5 + (((6 + (2 + (7 + 9))) / (8 + 6)) * 7))=17 ((5 + (6 + (2 + (7 + (9 - 8))))) * (6 / 7))=18 (5 + (6 + (2 + (7 + ((9 - 8) * (6 - 7))))))=19 (5 + (6 + (2 + (7 + ((9 - 8) + (6 - 7))))))=20 (5 + (6 + (2 + (7 + (9 + (8 * (6 - 7)))))))=21 (5 + (6 + (2 + (7 + ((9 - (8 + 6)) + 7)))))=22 ((5 + (6 + (((2 + (7 + 9)) * 8) + 6))) / 7)=23 (5 + (6 + (2 + (7 + (9 + (8 - (6 + 7)))))))=24 (5 + (6 + (2 + (7 + ((9 * (8 / 6)) - 7)))))=25 (5 + ((6 + (2 + (7 - (9 * (8 / 6))))) * 7))=26 (5 + (6 + (2 + ((7 + (9 - (8 + 6))) * 7))))=27 (5 + (6 + (((2 + (7 + 9)) * (8 / 6)) - 7)))=28 ((5 + (((6 + (2 + (7 + 9))) * 8) + 6)) / 7)=29 (5 + (((6 + (2 + (7 + 9))) * (8 / 6)) - 7))=30 (5 + (6 + (2 + (7 + (9 + ((8 + 6) / 7))))))=31 (5 + (6 + (2 + ((7 + (9 * (8 + 6))) / 7))))=32 (5 + (6 + (2 + (7 + ((9 - 8) * (6 + 7))))))=33 (5 + (6 + (2 + (7 + ((9 - 8) + (6 + 7))))))=34 ((5 + (6 + (((2 + (7 - 9)) * 8) - 6))) * 7)=35 (5 + (6 + (2 + (7 + (9 + (8 + (6 - 7)))))))=36 (5 + (6 + (2 + (7 + (9 - (8 * (6 - 7)))))))=37 (5 + (6 + (2 + (7 + (9 + ((8 - 6) + 7))))))=38 (5 + (6 + ((2 + (7 + (9 - (8 + 6)))) * 7)))=39 (5 + (6 + (((2 + (7 + 9)) * (8 - 6)) - 7)))=40 (5 + (6 + (2 + (((7 + (9 + 8)) / 6) * 7))))=41 (5 + (6 + (((2 + (7 + 9)) * (8 / 6)) + 7)))=42 (5 + (6 + (2 + (7 + (9 + ((8 - 6) * 7))))))=43 (5 + (((6 + (2 + (7 + 9))) * (8 / 6)) + 7))=44 (5 + (6 + (2 + ((7 + 9) * ((8 + 6) / 7)))))=45 (5 + (((6 + (2 + (7 + 9))) * (8 - 6)) - 7))=46 (5 + (6 + ((2 + (7 + 9)) * ((8 + 6) / 7))))=47 (5 + (((6 + ((2 + (7 - 9)) * 8)) * 6) + 7))=48 ((5 + (6 + (2 + (((7 * 9) - 8) * 6)))) / 7)=49 (5 + (6 + (2 + (7 + (9 + (8 + (6 + 7)))))))=50 (((5 + (6 + (2 + (7 + 9)))) * (8 - 6)) - 7)=51 (5 + (6 + (2 + (((7 + 9) * (8 - 6)) + 7))))=52 (5 + (6 + ((2 + ((7 + (9 + 8)) / 6)) * 7)))=53 (5 + (6 + (2 + (((7 + (9 - 8)) * 6) - 7))))=54 (((5 + ((6 + (2 + (7 + 9))) / 8)) * 6) + 7)=55 (5 + ((6 + ((2 + (7 + 9)) / (8 + 6))) * 7))=56 (5 + (6 + (2 + (((7 + 9) / 8) + (6 * 7)))))=57 ((5 + (6 + (2 + (7 + 9)))) * ((8 + 6) / 7))=58 (5 + ((6 + (2 + (7 - 9))) * ((8 - 6) + 7)))=59 (5 + (((6 + (2 + (7 + 9))) * (8 - 6)) + 7))=60 (5 + (6 + (2 + ((7 - 9) + (8 + (6 * 7))))))=61 (5 + (6 + (2 + (7 + ((9 - 8) * (6 * 7))))))=62 (5 + (6 + (2 + (7 + ((9 - 8) + (6 * 7))))))=63 (5 + (6 + (((2 + (7 + (9 - 8))) * 6) - 7)))=64 (((5 + (6 + (2 + (7 + 9)))) * (8 - 6)) + 7)=65 (5 + (6 + (2 + ((7 - 9) + ((8 * 6) + 7)))))=66 (5 + ((6 + (2 + (((7 * 9) + 8) * 6))) / 7))=67 (5 + (6 + (2 + (((7 + (9 - 8)) * 6) + 7))))=68 (5 + (6 + (2 + (7 + (((9 - 8) + 6) * 7)))))=69 (5 + (6 + (2 + (7 + (9 + ((8 * 6) - 7))))))=70 ((5 + (6 + ((2 + (7 + (9 * 8))) * 6))) / 7)=71 (5 + (((6 + (2 + ((7 + 9) / 8))) * 6) + 7))=72 (((5 + (6 + ((2 + (7 - 9)) * 8))) * 6) + 7)=73 (5 + (6 + ((2 + (7 + (9 * (8 * 6)))) / 7)))=74 (5 + ((6 + (2 + (7 + (9 - (8 + 6))))) * 7))=75 (((5 + (6 + (2 + 7))) * 9) - (8 * (6 + 7)))=76 ((5 + (6 + (2 + (7 - 9)))) * (8 + (6 - 7)))=77 (5 + (6 + (((2 + (7 + (9 - 8))) * 6) + 7)))=78 (5 + (6 + (2 + (7 + (9 + (8 + (6 * 7)))))))=79 ((5 + (6 + (2 + 7))) * (9 + (8 - (6 + 7))))=80 (5 + (6 + ((2 + (((7 + 9) / 8) + 6)) * 7)))=81 (5 + (((6 + (2 + ((7 - 9) + 8))) * 6) - 7))=82 (5 + (6 + (2 + (7 + (9 * (8 + (6 - 7)))))))=83 (5 + (6 + (2 + (7 + (9 + ((8 * 6) + 7))))))=84 (5 + (6 + (2 + ((7 * 9) + ((8 - 6) + 7)))))=85 ((5 + (6 + ((2 + (7 + 9)) / (8 + 6)))) * 7)=86 (((5 + (6 + (2 + (7 - 9)))) * 8) + (6 - 7))=87 (5 + (((6 + (2 + 7)) * ((9 - 8) * 6)) - 7))=88 (5 + ((6 + (2 + ((7 + (9 + 8)) / 6))) * 7))=89 ((5 + (6 + (2 + ((7 - 9) / (8 + 6))))) * 7)=90 (5 + (6 + (2 + (7 + ((9 * 8) + (6 - 7))))))=91 (5 + (6 + (2 + (7 - (9 * (8 * (6 - 7)))))))=92 (5 + (6 + (2 + (7 + (((9 * 8) - 6) + 7)))))=93 (5 + (((6 + (2 + (7 + (9 - 8)))) * 6) - 7))=94 (5 + (6 + (2 + (7 + (9 * ((8 / 6) + 7))))))=95 (5 + (((6 + (2 + ((7 - 9) + 8))) * 6) + 7))=96 (5 + (6 + (2 + (7 + ((9 + (8 - 6)) * 7)))))=97 ((5 + (((6 + (2 + (7 + 9))) / 8) + 6)) * 7)=98 (5 + (6 + (2 + (((7 + 9) * 8) - (6 * 7)))))=99 (5 + (6 + (((2 + 7) * 9) - (8 * (6 - 7)))))=100