본문 바로가기

소수표현

(2)
[EP 080] 100까지의 정수의 제곱근의 자리수 합 (과거 2007년에 썼던 포스팅 재활용입니다. 접근제한된 블로그에 잠자고 있어서 꺼내옴.) 문제는 이렇다. : 100까지의 정수의 제곱근 중에 무리수인 것의 십진수 소수표현을 구해서, 그 소수표현에 나오는 100개의 자릿수를 더한 값을 모두 더한 값은? 별 생각없이 그냥 순리대로 짜면 구해진다. 무리수가 아닌 건 빼라는 게 함정이었을지도... (실제로 이 조건을 안 써서 한 서너번 재시도. 도대체 틀릴 구석이 없는데...) # http://projecteuler.net/index.php?section=problems&id=80 def GetRoot(n): ret = 0 nn = n digit_sum = 0 for i in range(100): d = 0 while ret*ret
생성함수 수열을 점화식으로 표현할 수도 있지만, 생성함수(generating function)라는 다항식을 이용해서 표현하는 방법도 있다고 한다. 뭔가 싶었다. 그런데, 좀 생각을 해 보니, 소수표현과 분수에 비유해서 설명할 수 있지 않을까 하는 생각이 들었다. 그러니까, 3/7 이라는 소수는 0부터 9까지의 수만 갖는 무한수열을 표현한다. 0.428571428571... 을 4, 2, 8, 5, 7, 1... 이렇게 이어지는 무한수열을 나타내는 것이라고 보자는 거다. 그럼, 좀 복잡한 점화식 대신에, 3/7 이라는 간단한 수로 무한한 수열을 표현할 수 있다. 그런데, 정수의 소수표현은 0부터 9까지의 수만 수열의 한 항으로 가질 수 있다는 한계가 있다. 이건 진법을 바꾸면 무한하게 늘어날 수 있겠지만, 아무리 ..