题目描述
给出一个整数 NN,将 NN 分解为若干个 22 的次幂的和,共有多少种方法?
输入格式
输入一个整数 NN(1 \leq N \leq 10^61≤N≤106)。
输出格式
输出方案数对 10^9109 取模的结果。
输入输出样例
输入 #1复制
7
输出 #1复制
6
说明/提示
所有合法方案如下:
- 1+1+1+1+1+1+1
- 1+1+1+1+1+2
- 1+1+1+2+2
- 1+1+1+4
- 1+2+2+2
- 1+2+4 上代码:
-
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 1002334 #define R register using namespace std; const int mod=1000000000; int n,dp[N]; int main() { cin>>n; dp[1]=1; for(R int i=2;i<=n;++i) { if(i&1)dp[i]=dp[i-1]; else dp[i]=(dp[i-1]+dp[i>>1])%mod; } cout<<dp[n]; return 0; }