랭크 | 상태 |
---|---|
Gold III, 1081 합 | 성공 |
이 문제는 n~m 범위의 자릿수합(Digit Sum)을 빠르게 구하는 방법을 요구한다.
을 n의 자릿수합이라고 하고, 을 0부터 n까지의 자릿수합이라고 하자.
임의의 자연수 m에 대해 이므로 은 n과 m을 포함하는 범위의 자릿수합이라고 할 수 있다.
한 자리수에선 자릿수합이나 합이나 다름이 없으므로, 이다.
십의 자리 뒤에 붙을 수 있는 숫자들을 생각해보자. 일의 자리 수 0~9가 붙을 거니까 십의 자리 수는 10번 나오고, 10의 자리로 오기 전의 자릿수합을 생각하면 되니까 S(10 - 1)을 넣으면 될 것이다. 그렇다면 이다.
백의 자리는 어떨까? 0~99가 붙을 거니까 백의 자리는 100번 나오고, 백의 자리로 오기 전까지의 자릿수합을 생각하면 되니까 S(100 - 1)을 넣으면 될 것이다. 그렇다면 이다.
그렇다면 그 다음 자리도, 다음 다음 자리도, 그 뒤로도 쭉 비슷하게 생각할 수 있지 않을까? 10, 100, 1000, 10000, ...으로 계속될 것이다.
따라서, 이 식의 일반화된 꼴은 다음과 같다:
위의 성질로 인해 우리는 꼴을 자주 구해야 한다는 걸 알 수 있다. 더 빠르게 구할 방법은 없을까? 한 번 직접 전개해보자.
반복되는 꼴을 찾을 수 있다. 괄호를 풀고 좀 정리를 하면 다음과 같이 정리가 된다.
조금 복잡해보이지만 직접 대입해서 풀어보면 45 × 1, 45 × 20, 45 × 300, ... 임을 알 수 있다. 따라서 식을 다음과 같이 변형할 수 있다.
슬프게도 가 아니다. 은 번 더 등장하기 때문이다. 이걸 고려해서 더해줘야 제대로 된 결과가 나온다.
지금에서야 저렇게 멋지게 정리할 수 있었지만 나는 이 문제를 다음과 같은 방법으로 풀었다.
PS하는 피림이
@PSing_Pirim새로운 증명법을 알게 된 피림이