#1534
Gold III

제곱수의 합

시간 제한
1s
메모리 제한
512MB
제출
21
정답
13
맞힌 사람
10
정답 비율
76.9%

문제

모든 자연수는 서로 다른 22의 거듭제곱의 합으로 나타낼 수 있다. 예를 들어 15=23+22+21+2015 = 2^3 + 2^2 + 2^1 + 2^0이고, 5=22+205 = 2^2 + 2^0이다.

그렇다면 22 대신 다른 정수 KK의 거듭제곱을 사용하면 어떨까?

LL 이상 RR 이하의 자연수 중에서 서로 다른 KK의 거듭제곱의 합으로 나타낼 수 없는 수의 개수를 구해 보자. 사용할 수 있는 거듭제곱은 K0,K1,K2,…K^0, K^1, K^2, \ldots이며, 각 거듭제곱은 최대 한 번만 사용할 수 있다.

입력

첫째 줄에 세 정수 LL, RR, KK가 공백으로 구분되어 주어진다. (1≤L≤R≤1018;2≤K≤100)(1 \le L \le R \le 10^{18}; 2 \le K \le 100)

출력

LL 이상 RR 이하인 정수 중 KK의 서로 다른 음이 아닌 정수 거듭제곱의 합으로 표현할 수 없는 정수의 개수를 출력한다.

예제 1

10 20 4

출력 1

8

예제 2

1 1000000000000000000 2

출력 2

0

예제 3

1 1000000000000000000 3

출력 3

999999725122093057

힌트

예제 1에서 1010 이상 2020 이하의 수 중 서로 다른 44의 거듭제곱의 합으로 나타낼 수 있는 수는 다음 세 개이다.

  • 16=4216 = 4^2
  • 17=42+4017 = 4^2 + 4^0
  • 20=42+4120 = 4^2 + 4^1

1010 이상 2020 이하에는 모두 1111개의 수가 있으므로, 이 세 수를 제외한 11−3=811-3=8개의 수는 서로 다른 44의 거듭제곱의 합으로 나타낼 수 없다.

문제를 만든 사람
조서현
알고리즘 분류
코드 제출

코드를 제출하려면 로그인이 필요합니다.

로그인
내 제출

제출 내역이 없습니다.

맞은 사람
#순위사용자언어시간메모리코드 길이
10580🥇
SW-IT Contest는 충남대학교 컴퓨터인공지능학부 알고리즘 동아리 ANA에서 주최하는 프로그래밍 대회로, 팀으로 출전하여 알고리즘 문제를 해결하는 대회입니다.
C++1ms1432KB899B
10714🥈
실외기선풍기세탁기
C++1ms1496KB588B
10302🥉
황현석
C++1ms1496KB455B
105244
Kokiri is cute
C++1ms1496KB529B
106545
세얼간이
C++1ms1496KB898B
107526
OOOOOOOO
C++1ms1496KB861B
104797
스피드런도 런이다
Python9ms9144KB391B
109268
이채환여친구함
Python10ms9196KB300B
109889
백성현
PyPy23ms49868KB695B
1058810
cpp = competitive python programming
PyPy24ms49760KB316B
난이도 투표
Gold III2명 투표· 16일 전
로그인 후 AC 받으면 투표할 수 있습니다.
전체 제출
#사용자문제결과언어시간메모리코드 길이제출 시간
10988
맞았습니다
PyPy23ms49868KB695B2026. 10. 07. 01:16
10987
틀렸습니다
PyPy--694B2026. 10. 07. 01:15
10986
틀렸습니다
PyPy--497B2026. 10. 07. 01:08