给你一个正整数n,将其划分,要求划分成的数必须是2的幂,有多少种划分方法??
结果可能很大,我们输出对1e9+7取模的结果
输入
一个正整数n,代表要划分的数;
1<=n<=1e71<=n<=1e7
输出
输出可划分的方法数
样例输入
15 67
样例输出
26 2030
提示
当n=6时,我们可以将其划分为
1 1 1 1 1 1
1 1 1 1 2
1 1 2 2
2 2 2
1 1 4
2 4
这6种划分方法
#include <bits/stdc++.h>
using namespace std;
#define re(ss,dd) for(int i=ss;i<dd;++i)
#define er(ss,dd) for(int i=dd;i>=ss;--i)
#define wl(ss) while(ss)
const int MOD = 1e9 + 7;
const int MAXN = 1e7 + 5;
long long cnt[MAXN];
int main()
{
int n;
while(cin>>n){
cnt[0] = 1;
for (int i = 1; i <= n; i++){
if (i&1){
cnt[i] = cnt[i - 1];
}
else{
cnt[i] = (cnt[i - 1] + cnt[i / 2]) % MOD;
}
}
cout << cnt[n] << endl;
}
return 0;
}