Project Euler の問題 #55を解決しようとしています。
47 を逆にして足すと、47 + 74 = 121 となり、回文になります。
すべての数が回文数をすぐに生成するわけではありません。例えば、
349 + 943 = 1292、1292 + 2921 = 4213、4213 + 3124 = 7337
つまり、349 は回文に到達するのに 3 回の繰り返しが必要でした。
まだ誰もそれを証明していませんが、196 のようないくつかの数は決して回文を生成しないと考えられています。逆算して足し算しても決して回文にならない数をリクレル数という。これらの数値の理論的性質により、またこの問題の目的のために、そうでないことが証明されるまで数値は Lychrel であると仮定します。さらに、1 万未満のすべての数値について、(i) 50 回未満の反復で回文になるか、(ii) 存在するすべての計算能力を使用して、これまで誰も回文に成功していないことが与えられます。それを回文にマッピングします。実際、10677 は、回文を生成する前に 50 回以上の反復を必要とする最初の数値です: 4668731596684224866951378664 (53 回の反復、28 桁)。
驚くべきことに、それ自体が Lychrel 数である回文数があります。最初の例は 4994 です。
一万以下のライクレル数はいくつある?
TL;DR:数が回文でない場合は、それ自体の逆数に追加します。まだいいですか?繰り返す。...50 回繰り返した後... Lychrel 数です。
私のコード:
def isPalindrome(n):
return str(n)[::-1] == str(n)
lychrels = 0
for i in range(1,10000):
lychrel = True
for j in range(50):
if isPalindrome(i):
lychrel = False
break
else:
i += int(str(i)[::-1])
if lychrel:
lychrels += 1
print(lychrels)
349 (非 Lychrel) および 196 (Lychrel) のテスト ケースでは正しく動作しますが、Project Euler は私が得た回答を拒否しています。
私はまだ問題を解決していないので、直接的な解決策よりもヒントを希望します。
私は何を間違っていますか?