#include <bits/stdc++.h> using namespace std; int main() { int N; cin>>N; int dp[N+1];//dp[i]=整数i的拆分种数 dp[1]=1;//整数1只有一种拆分方式 dp[2]=2;//整数2可以有两种拆分方式 for(int i=3;i<=N;i++) { //1.如果是奇数,拆分中一定包含1,只要dp[i/2]中每种拆分方式都加个1,就肯定包含1 if(i%2==1) { dp[i]=dp[i-1]%1000000000; } //2.如果是偶数,有且仅有两种可能,包含1或者不包含1 //dp[i-1]是包含1的种类,原因同上 //dp[i/2]是不包含1的拆分方式数目,只要dp[i/2]中每种拆分方式中的每个元素都×2,就肯定不包含1 else { dp[i]=(dp[i-1]+dp[i/2])%1000000000; } } cout<<dp[N]; } // 64 位输出请用 printf("%lld")