통계, IT, AI

[Project Euler] 55. Lychrel numbers, 56. Powerful digit sum 본문

IT/PROJECT_EULER

[Project Euler] 55. Lychrel numbers, 56. Powerful digit sum

Harold_Finch 2017. 7. 26. 20:55

1. 55번 개요

    문제는 이곳에서 확인할 수 있다. 47을 거꾸로 한 뒤 서로 더하면, 47+74=121이 되며 121은 회문자 palindrome이다. 349는 이 과정을 세번을 거치면 7337이 되어 회문자가 된다. 증명된 것은 아니지만, 어떤 숫자들은 거꾸로 한뒤 서로 더하는 과정을 아무리 거쳐도 회문자가 되지 않는다고 추측된다. 이러한 숫자들을 Lychrel 수라고 한다. 10,000보다 작은 Lycherel 수의 개수를 구하는 것이 문제의 목표이다. 단, 50번 안에 회문자가 되지 않으면 그 수는 Lycherel 수라고 가정한다.

2. 55번 구현

# -*- coding: utf-8 -*-
# Project Euler 55

def reverse_n(n):
    return int(str(n)[::-1])

ans = 0

for tmp_n in range(1, 10000):
    n = tmp_n + reverse_n(tmp_n)

    for i in range(1, 50):
        if n == reverse_n(n):
              break
        n += reverse_n(n)
    
    else:
        ans += 1

print(ans)

    답은 249이다.


3. 56번 개요

    문제는 이곳에서 확인할 수 있다. \(10^{100}\)은 아주 큰 수이지만 각 자리수의 합은 1에 불과하다. \(a, \ b < 100\)인 자연수 \(a, \ b\)에 대하여, \(a^b\)의 각 자리수의 합의 최대값을 구하는 것이 문제의 목표이다.

4. 56번 구현

# -*- coding: utf-8 -*-
# Project Euler 56

print(max(sum(map(int, str(a**b))) for a in range(1, 100) for b in range(1, 100)))

    답은 972이다.


Comments