LOJ 6268 分拆數(DP 生成函式)

2021-10-04 12:54:14 字數 2073 閱讀 5651

可以參見eiei

ei的部落格傳送門

首先有乙個exp

⁡\exp

exp的o(n

logn

)o(nlogn)

o(nlog

n)做法這裡

考慮ferr

ers圖

ferrers圖

ferrer

s圖從左上角向右下截乙個最大的正方形

設正方形邊長為h

hh那麼剩下兩部分就都是≤

h\le h

≤h的整數拆分

即可以列出分拆數的生成函式∏i≥

111−

xi=∑

h≥1x

h2(∏

k=1h

11−x

k)

\prod_\frac=\sum_x^(\prod_^h\frac 1)

i≥1∏​1

−xi1

​=h≥

1∑​x

h2(k

=1∏h

​1−x

k1​)

由於有h

2h^2

h2所以只用考慮h≤n

h\le \sqrt n

h≤n​

時候計算即可

複雜度o(n

n)

o(n\sqrt n)

o(nn​)

吊打exp

⁡\exp

exp

#include

using

namespace std;

#define cs const

#define re register

#define pb push_back

#define pii pair

#define ll long long

#define fi first

#define se second

#define bg begin

cs int rlen=

1<<20|

1;inline

chargc(

)inline

intread()

inline ll readll()

inline

intreadstring

(char

*s)template

<

typename tp>

inline

void

chemx

(tp &a,tp b)

template

<

typename tp>

inline

void

chemn

(tp &a,tp b)

cs int mod=

998244353

;inline

intadd

(int a,

int b)

inline

intdec

(int a,

int b)

inline

intmul

(int a,

int b)

inline

void

add(

int&a,

int b)

inline

void

dec(

int&a,

int b)

inline

void

mul(

int&a,

int b)

inline

intksm

(int a,

int b,

int res=1)

inline

intinv

(int x)

cs int n=

100005

;int f[n]

,g[n]

;int

main()

for(

int i=

1;i<=n;i++

)cout<<<

"\n"

;return0;

}

分拆素數和

分拆素數和 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?input 輸入包含一些正的偶數,其值不會超過10000,個數不...

分拆素數和

把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?input輸入包含一些正的偶數,其值不會超過10000,個數不會超過500,若遇0,則結束。output對應每個偶數,輸出其拆成不同素數的個數,每個結果佔一行。sample input30 260sample output3 2 這個題的思路比較簡單,你...

分拆素數和。

description 把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?input 每行包含乙個正的偶數,其值不會超過10000,個數不會超過500。output 對應每個偶數,輸出其拆成不同素數和的組數,每個結果佔一行。sample input 30 26 sample output3 2 寫乙個判...