자연수 N을 2의 멱수의 합으로 나타내는 경우의 수를 구하라.
을 포함하는 경우
와 동일합니다. 왜냐하면 을 구하는데 이 사용됐건 안됐건 을 더해줄 것이기 때문입니다.
을 포함하지 않는 경우
이 됩니다. 은 절대 사용하지 않고 N을 만든 경우의 수 입니다.
import java.io.*;
import java.util.*;
class baek__2410 {
static int MAX = 1000000;
static long r = 1000000000;
static long[][] d = new long[MAX + 1][21];
static long go(int n, int m) {
if (m < 0)
return 0;
if (n <= 0) {
if (n == 0)
return 1;
return 0;
}
if (d[n][m] != -1)
return d[n][m];
d[n][m] = go(n - (1 << m), m) + go(n, m - 1);
d[n][m] %= r;
return d[n][m];
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < MAX + 1; i++) {
for (int j = 0; j < 21; j++) {
d[i][j] = -1;
}
}
int n = Integer.parseInt(br.readLine());
System.out.print(go(n, 20));
}
}