题目描述
给你一个正整数n,将其划分,要求划分成的数必须是2的幂,有多少种划分方法??
结果可能很大,我们输出对1e9+7取模的结果
输入
一个正整数n,代表要划分的数; 1 <= 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;
const long long mod=1e9+7;
const long long m=1e7+10;
long long s[m];
int main()
{
int i;
s[0]=0;
s[1]=1;
for(i=2;i<1e7+10;i++)
{
if(i&1) s[i]=s[i-1];
else
{
s[i]=(s[i-1]+s[i/2])%mod;
}
}
int n;
while(cin>>n)
{
cout<<s[n]<<endl;
}
return 0;
}