任何正整数都能分解成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
比如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
#include <iostream>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 1e6 + 5;
int cnt[MAXN];
int main()
{
int n;
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;
}