-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProjectEuler55.py
37 lines (36 loc) · 1.5 KB
/
ProjectEuler55.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-
# project euler problem 55
"""
47とその反転を足し合わせると, 47 + 74 = 121となり, 回文数になる.
全ての数が素早く回文数になるわけではない. 349を考えよう,
1. 349 + 943 = 1292,
2. 1292 + 2921 = 4213
3. 4213 + 3124 = 7337
349は, 3回の操作を経て回文数になる.
まだ証明はされていないが, 196のようないくつかの数字は回文数にならないと考えられている.
反転したものを足すという操作を経ても回文数にならないものをLychrel数と呼ぶ.
先のような数の理論的な性質により, またこの問題の目的のために,
Lychrel数で無いと証明されていない数はLychrel数だと仮定する.
更に, 10000未満の数については以下を仮定してよい.
1. 50回未満の操作で回文数になる
2. まだ誰も回文数まで到達していない
実際, 10677が50回以上の操作を必要とする最初の数である:
4668731596684224866951378664 (53回の操作で28桁のこの回文数になる).
驚くべきことに, 回文数かつLychrel数であるものが存在する.
最初の数は4994である.
10000未満のLychrel数の個数を答えよ.
"""
import time
import Euler
time1 = time.time()
s = 0
for i in range(1, 10000):
k = i
for n in range(1, 50):
k += int(str(k)[::-1])
if Euler.is_kaibun(k):
s += 1
break
answer = 9999 - s
print(answer)
print(time.time() - time1, "Seconds")