Project Euler
프로젝트 오일러 055
10,000 미만의 라이크렐 수(Lychrel number) 세기
1분
#project euler
풀이
자신과 뒤집은 수를 더하는 것을 최대 50회까지 시행하면서 대칭수가 나오는지를 보면 됩니다. 50번 시행까지 나오지 않는다면 카운트합니다.
from euler import timeit
def test(n: int) -> bool:
for _ in range(50):
n += int(str(n)[::-1])
if str(n) == str(n)[::-1]:
return False
return True
@timeit
def main():
print(sum(map(int,map(test, range(1,10_001)))))
if __name__ == '__main__':
main()
이미 만들어 두었던 큰 수의 덧셈 기능을 사용해도 충분히 빠른 시간 내에 풀 수 있습니다.
from big import add
def test(n: int) -> bool:
m = str(n)
for _ in range(50):
m = add(m, m[::-1])
if m == m[::-1]:
return False
return True
print(sum(map(int, map(test, range(1, 10_001)))))