注意
该文章原文于 2024-02-16 14:43 发表于洛谷,链接与文章内容在此留作保存。
∑ i = 0 n ( n i ) × p i × ⌊ i k ⌋ m o d 998244353 \sum \limits_{i=0}^n \binom{n}{i} \times p^i \times \left\lfloor \frac{i}{k} \right\rfloor \bmod 998244353 i=0∑n(in)×pi×⌊ki⌋mod998244353
有:
⌊
i
k
⌋
=
i
−
i
m
o
d
k
k
\left\lfloor \frac{i}{k} \right\rfloor = \frac{i - i \bmod k}{k}
⌊ki⌋=ki−imodk
所以有:
∑
i
=
0
n
(
n
i
)
×
p
i
×
⌊
i
k
⌋
=
1
k
∑
i
=
0
n
(
n
i
)
×
p
i
×
(
i
−
i
m
o
d
k
)
\begin{aligned} & \sum \limits_{i=0}^n \binom{n}{i} \times p^i \times \left\lfloor \frac{i}{k} \right\rfloor\\ = & \frac{1}{k} \sum \limits_{i=0}^n \binom{n}{i} \times p^i \times (i - i \bmod k)\\ \end{aligned}
=i=0∑n(in)×pi×⌊ki⌋k1i=0∑n(in)×pi×(i−imodk)
先省略前面的
1
k
\frac{1}{k}
k1:
∑
i
=
0
n
(
n
i
)
×
p
i
×
(
i
−
i
m
o
d
k
)
=
∑
i
=
0
n
(
n
i
)
p
i
i
−
∑
i
=
0
n
(
n
i
)
p
i
(
i
m
o
d
k
)
\begin{aligned} & \sum \limits_{i=0}^n \binom{n}{i} \times p^i \times (i - i \bmod k)\\ = & \sum \limits_{i=0}^n \binom{n}{i} p^i i - \sum \limits_{i=0}^n \binom{n}{i} p^i (i \bmod k)\\ \end{aligned}
=i=0∑n(in)×pi×(i−imodk)i=0∑n(in)pii−i=0∑n(in)pi(imodk)
式子左边有:
∑
i
=
0
n
(
n
i
)
p
i
i
=
∑
i
=
0
n
(
n
−
1
i
−
1
)
n
p
i
=
n
p
∑
i
=
1
n
(
n
−
1
i
−
1
)
p
i
−
1
=
n
p
(
p
+
1
)
n
−
1
\begin{aligned} & \sum \limits_{i=0}^n \binom{n}{i} p^i i \\ = & \sum \limits_{i=0}^n \binom{n-1}{i-1} n p^i\\ = & np \sum \limits_{i=1}^n \binom{n-1}{i-1} p^{i-1}\\ = & np (p + 1) ^{n-1}\\ \end{aligned}
===i=0∑n(in)piii=0∑n(i−1n−1)npinpi=1∑n(i−1n−1)pi−1np(p+1)n−1
式子右边有:
∑
i
=
0
n
(
n
i
)
p
i
(
i
m
o
d
k
)
=
∑
i
=
0
n
(
n
i
)
p
i
∑
j
=
0
k
−
1
j
[
i
m
o
d
k
=
j
]
=
∑
i
=
0
n
(
n
i
)
p
i
∑
j
=
0
k
−
1
j
1
k
∑
s
=
0
k
−
1
ω
k
i
s
ω
k
−
j
s
=
1
k
∑
s
=
0
k
−
1
∑
i
=
0
n
(
n
i
)
p
i
ω
k
i
s
∑
j
=
0
k
−
1
j
ω
k
−
j
s
=
1
k
∑
s
=
0
k
−
1
(
∑
i
=
0
n
(
n
i
)
(
p
ω
k
s
)
i
)
∑
j
=
0
k
−
1
j
ω
k
−
j
s
=
1
k
∑
s
=
0
k
−
1
(
p
ω
k
s
+
1
)
n
∑
j
=
0
k
−
1
j
ω
k
−
j
s
\begin{aligned} & \sum \limits_{i=0}^n \binom{n}{i} p^i (i \bmod k)\\ = & \sum \limits_{i=0}^n \binom{n}{i} p^i \sum \limits_{j=0}^{k-1} j [i \bmod k = j]\\ = & \sum \limits_{i=0}^n \binom{n}{i} p^i \sum \limits_{j=0}^{k-1} j \frac{1}{k} \sum \limits_{s=0}^{k-1} \omega_k^{is} \omega_k^{-js}\\ = & \frac{1}{k} \sum \limits_{s = 0}^{k-1} \sum \limits_{i=0}^n \binom{n}{i} p^i \omega_k^{is} \sum \limits_{j=0}^{k-1} j \omega_k^{-js}\\ = & \frac{1}{k} \sum \limits_{s=0}^{k-1} \left( \sum \limits_{i=0}^n \binom{n}{i} (p \omega_k^s)^i \right) \sum \limits_{j=0}^{k-1} j \omega_k^{-js}\\ = & \frac{1}{k} \sum \limits_{s=0}^{k-1} (p \omega_k^s + 1)^n \sum \limits_{j=0}^{k-1} j \omega_k^{-js}\\ \end{aligned}
=====i=0∑n(in)pi(imodk)i=0∑n(in)pij=0∑k−1j[imodk=j]i=0∑n(in)pij=0∑k−1jk1s=0∑k−1ωkisωk−jsk1s=0∑k−1i=0∑n(in)piωkisj=0∑k−1jωk−jsk1s=0∑k−1(i=0∑n(in)(pωks)i)j=0∑k−1jωk−jsk1s=0∑k−1(pωks+1)nj=0∑k−1jωk−js
现在设法求出
∑
j
=
0
k
−
1
j
ω
k
−
j
s
\sum \limits_{j=0}^{k-1} j \omega_k^{-js}
j=0∑k−1jωk−js。
设 f ( k , p ) = ∑ j = 0 k j p j f(k, p) = \sum \limits_{j=0}^k j p^j f(k,p)=j=0∑kjpj。
已知:
∑
j
=
0
k
p
j
=
p
k
+
1
−
1
p
−
1
\sum \limits_{j=0}^k p^j = \frac{p^{k+1} - 1}{p - 1}
j=0∑kpj=p−1pk+1−1
所以有:
p
f
(
k
,
p
)
+
∑
j
=
0
k
p
j
−
1
−
k
p
k
+
1
=
f
(
k
,
p
)
p
f
(
k
,
p
)
+
p
k
+
1
−
1
p
−
1
−
1
−
k
p
k
+
1
=
f
(
k
,
p
)
p
k
+
1
−
1
p
−
1
−
1
−
k
p
k
+
1
=
f
(
k
,
p
)
(
1
−
p
)
f
(
k
,
p
)
=
p
k
+
1
−
1
p
−
1
−
1
−
k
p
k
+
1
1
−
p
\begin{aligned} p f(k, p) + \sum \limits_{j=0}^k p^j - 1 - k p^{k+1} & = f(k, p)\\ p f(k, p) + \frac{p^{k+1} - 1}{p - 1} - 1 - k p^{k+1} & = f(k, p)\\ \frac{p^{k+1} - 1}{p - 1} - 1 - k p^{k+1} & = f(k, p) (1 - p)\\ f(k, p) & = \frac{\frac{p^{k+1} - 1}{p - 1} - 1 - k p^{k+1}}{1 - p} \end{aligned}
pf(k,p)+j=0∑kpj−1−kpk+1pf(k,p)+p−1pk+1−1−1−kpk+1p−1pk+1−1−1−kpk+1f(k,p)=f(k,p)=f(k,p)=f(k,p)(1−p)=1−pp−1pk+1−1−1−kpk+1
注意,当
p
=
1
p = 1
p=1 时需要特判
f
(
k
,
p
)
=
k
(
k
+
1
)
2
f(k, p) = \frac{k (k+1)}{2}
f(k,p)=2k(k+1)。
所以:
∑
j
=
0
k
−
1
j
ω
k
−
j
s
=
f
(
k
−
1
,
ω
k
−
s
)
\begin{aligned} & \sum \limits_{j=0}^{k-1} j \omega_k^{-js}\\ = & f(k-1, \omega_k^{-s})\\ \end{aligned}
=j=0∑k−1jωk−jsf(k−1,ωk−s)
所以右式:
1
k
∑
s
=
0
k
−
1
(
p
ω
k
s
+
1
)
n
∑
j
=
0
k
−
1
j
ω
k
−
j
s
=
1
k
∑
s
=
0
k
−
1
(
p
ω
k
s
+
1
)
n
f
(
k
−
1
,
ω
k
−
s
)
\begin{aligned} & \frac{1}{k} \sum \limits_{s=0}^{k-1} (p \omega_k^s + 1)^n \sum \limits_{j=0}^{k-1} j \omega_k^{-js}\\ = & \frac{1}{k} \sum \limits_{s=0}^{k-1} (p \omega_k^s + 1)^n f(k-1, \omega_k^{-s})\\ \end{aligned}
=k1s=0∑k−1(pωks+1)nj=0∑k−1jωk−jsk1s=0∑k−1(pωks+1)nf(k−1,ωk−s)
所以原式:
1
k
(
∑
i
=
0
n
(
n
i
)
p
i
i
−
∑
i
=
0
n
(
n
i
)
p
i
(
i
m
o
d
k
)
)
=
1
k
(
n
p
(
p
+
1
)
n
−
1
−
1
k
∑
s
=
0
k
−
1
(
p
ω
k
s
+
1
)
n
f
(
k
−
1
,
ω
k
−
s
)
)
\begin{aligned} & \frac{1}{k} \left( \sum \limits_{i=0}^n \binom{n}{i} p^i i - \sum \limits_{i=0}^n \binom{n}{i} p^i (i \bmod k) \right)\\ = & \frac{1}{k} \left( np (p + 1) ^{n-1} - \frac{1}{k} \sum \limits_{s=0}^{k-1} (p \omega_k^s + 1)^n f(k-1, \omega_k^{-s})\right) \end{aligned}
=k1(i=0∑n(in)pii−i=0∑n(in)pi(imodk))k1(np(p+1)n−1−k1s=0∑k−1(pωks+1)nf(k−1,ωk−s))
代码并不难写。
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
inline ll chk(ll x) { return x >= mod ? x-mod : x; }
inline ll fpm(ll a, ll k = mod-2) {
ll res = 1;
while(k) {
if(k&1) res = res*a % mod;
a = a*a % mod;
k >>= 1;
}
return res;
}
inline ll f(ll k, ll p) {
if(p == 1) return k * (k+1) / 2 % mod;
ll res = chk(mod + fpm(p, k+1) - 1) * fpm(p-1) % mod;
res = chk(res + mod - 1);
res = chk(res + 1ll * (mod-1) * k % mod * fpm(p, k+1) % mod);
return 1ll * res * fpm(mod+1-p) % mod;
}
int n, p, k, w, ans;
int main() {
scanf("%d %d %d", &n, &p, &k);
w = fpm(3, (mod-1) / k);
for(int s = 0; s < k; s++)
ans = chk(ans + 1ll * fpm(1ll * p * fpm(w, s) % mod + 1, n) * f(k-1, fpm(fpm(w), s)) % mod);
ll res = ans = 1ll * ans * fpm(k) % mod * (mod-1) % mod;
ans = chk(ans + 1ll * n * p % mod * fpm(p+1, n-1) % mod);
ans = 1ll * ans * fpm(k) % mod;
printf("%d\n", ans);
return 0;
}