#include <stdio.h> #define MOD 1000000000 int dp[1000001]; // 全局数组,避免栈溢出 int split_number(int n) { // 初始化dp数组 for (int i = 0; i <= n; i++) { dp[i] = 0; } dp[0] = 1; // 用位运算生成2的幂次并更新dp int power = 1; while (power <= n) { for (int j = power; j <= n; j++) { dp[j] = (dp[j] + dp[j - power]) % MOD; } power <<= 1; // 位运算代替乘法 } return dp[n]; } int main() { int n; scanf("%d", &n); if (n >= 1 && n <= 1000000) { printf("%d\n", split_number(n)); } return 0; }