[51Nod 1383] 整數分解為2的冪
阿新 • • 發佈:2019-02-13
Description
任何正整數都能分解成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(1 <= N <= 10^6)
輸出劃分方法的數量Mod 1000000007
Solution
這題其實真的很水,真的。
1很特殊,特殊的東西特殊搞。
這題觀察一下題目,好像可以遞推一下。
設方案數為 [i]
觀察等式,發現1很特殊,特殊的東西特殊搞。
劃分方法要麼有1,要麼沒有1,也就是全是偶數。
有1,那就顯然可以從
沒有1,那就全是偶數嘛,全是偶數那就可以全部除個2嘛,於是又可以從
所以
然後?沒有然後了。
Code
就這麼短……
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define N 1000005
#define mo 1000000007
using namespace std;
int n,m,f[N];
int main()
{
cin>>n;
f[1]=1;
fo(i,2,n)
{
if(i%2==0) f[i]=(f[i-1]+f[i/2])%mo;
else f[i]=f[i-1 ];
}
cout<<f[n];
}