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)))))