任何正整数都能分解成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
找规律
受手动找了1-8
1:1
2:2
3:2
4:4
5:4
6:6
7:6
8:10
9:10
我们发现奇数等于他的上一个。f【i】=f[i-1]
而偶数等于他的上一个加上他的一半的值f[i]=f[i-1]+f[i/2]
#include <iostream>
#include<stdio.h>
#include<set>
#include<math.h>
using namespace std;
int main()
{
long long f[1000010];
int n;
cin>>n;
f[1]=1;
f[2]=2;
for(int i=3;i<=n;i++)
{
if(i%2==0)
{
f[i]=(f[i-1]+f[i/2])%1000000007;
}
else
{
f[i]=f[i-1];
}
}
cout<<f[n]%1000000007<<endl;
}
#include<stdio.h>
#include<set>
#include<math.h>
using namespace std;
int main()
{
long long f[1000010];
int n;
cin>>n;
f[1]=1;
f[2]=2;
for(int i=3;i<=n;i++)
{
if(i%2==0)
{
f[i]=(f[i-1]+f[i/2])%1000000007;
}
else
{
f[i]=f[i-1];
}
}
cout<<f[n]%1000000007<<endl;
}