可以參見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 寫乙個判...