#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1000001;
const int MOD = 1000000000;
int dp[MAXN];
int main() {
int n;
scanf("%d", &n);
// 初始化 dp 数组
for (int i = 0; i <= n; i++) {
dp[i] = 0;
}
dp[0] = 1; // 数字 0 的拆分方案数为 1
// 遍历所有 2 的幂
for (int pos = 0; (1ll << pos) <= n; pos++) {
long long temp = 1ll << pos; // 计算 2^pos
for (int j = temp; j <= n; j++) {
dp[j] = (dp[j] + dp[j - temp]) % MOD;
}
}
printf("%d\n", dp[n]);
return 0;
}

京公网安备 11010502036488号