任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果。
比如N = 7时,共有6种划分方法。
7=1+1+1+1+1+1+1
=1+1+1+1+1+2
=1+1+1+2+2
=1+2+2+2
=1+1+1+4
=1+2+4
Input
输入一个数N(1 <= N <= 10^6)
Output
输出划分方法的数量Mod 1000000007
Input示例
7
Output示例
6
/*规律题
当n为奇数时 a[n]=a[n-1]
n为偶数时 a[n]=a[n-1]+a[n/2]
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M = 1e9 + 7;
const int MAXN = 1e7 + 5;
int a[MAXN];
void F()
{
a[0]=1;
for(int i=1;i<MAXN;i++)
{
if(i&1)
a[i] = a[i-1] % M;
else
a[i] = ( a[i-1] + a[i/2] ) % M;
}
}
int main()
{
F();
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",a[n]);
}
return 0;
}