1383 整數分解為2的冪

2022-08-02 22:45:14 字數 1218 閱讀 8392

1383 整數分解為2的冪

基準時間限制:1 秒 空間限制:131072 kb

任何正整數都能分解成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

f(2m+1) = f(2m)   因為奇數整數2m+1的每種分解方式中都必然含有至少乙個1,當把每種分解方式都去掉1時,就得到2m的分解方式

f(2m) = f(2m-1) + f(m)  偶數整數2m的分解方式中可能有1,也可能沒有1。如果有1,那一定會有偶數個1。現在把有1和無1分成兩部分。

先看有1的那部分,當把這部分裡每個分解方式都去掉1,就得到2m-1的分解方式

然後再看無1的那部分,因為沒有1,所以所有的分解方式都全是2的倍數,當把這部分裡每種分解方式都除以2時,這就相當於全是m的分解方式

(**

1 #include2 #include3 #include4 #include

5 #include6 #include7 #include

8 #include9 #include10

using

namespace

std;

11 typedef long

long

ll;12 ll n[1000006

];13

const ll mod = 1e9+7;14

int main(void)15

24else

2528}29

intn;

30 scanf("

%d",&n);

31 printf("

%lld\n

",n[n]);

32return0;

33 }

51Nod 1383 整數分解為2的冪

任何正整數都能分解成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 看到這題就是乙個遞推題,...

51nod 1383 整數分解為2的冪

畫畫,找規律。dp n 表示n的劃分方法。當n為奇數的時候,dp n dp n 1 n 1每種分解後邊都加上乙個1就是了。當n為偶數的時候,dp n dp n 1 dp n 2 n 1的每種分解都加乙個1,這是一種情況,因為n是偶數,還有把1合併成2,把2合併成4的情況,這時候多出的這部分分解後的最...

51nod 1383 整數分解為2的冪

1383 整數分解為2的冪 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 任何正整數都能分解成2的冪,給定整數n,求n的此類劃分方法的數量!由於方案數量較大,輸出mod 1000000007的結果。比如n 7時,共有6種劃分方法。7 1 1 1 1 1 1 1 ...