P5591 小猪佩奇学数学 题解

注意

该文章原文于 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=0n(in)×pi×kimod998244353

有:
⌊ i k ⌋ = i − i   m o d   k k \left\lfloor \frac{i}{k} \right\rfloor = \frac{i - i \bmod k}{k} ki=kiimodk
所以有:
∑ 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=0n(in)×pi×kik1i=0n(in)×pi×(iimodk)
先省略前面的 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=0n(in)×pi×(iimodk)i=0n(in)piii=0n(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=0n(in)piii=0n(i1n1)npinpi=1n(i1n1)pi1np(p+1)n1
式子右边有:
∑ 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=0n(in)pi(imodk)i=0n(in)pij=0k1j[imodk=j]i=0n(in)pij=0k1jk1s=0k1ωkisωkjsk1s=0k1i=0n(in)piωkisj=0k1jωkjsk1s=0k1(i=0n(in)(pωks)i)j=0k1jωkjsk1s=0k1(pωks+1)nj=0k1jωkjs
现在设法求出 ∑ j = 0 k − 1 j ω k − j s \sum \limits_{j=0}^{k-1} j \omega_k^{-js} j=0k1jωkjs

f ( k , p ) = ∑ j = 0 k j p j f(k, p) = \sum \limits_{j=0}^k j p^j f(k,p)=j=0kjpj

已知:
∑ 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=0kpj=p1pk+11
所以有:
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=0kpj1kpk+1pf(k,p)+p1pk+111kpk+1p1pk+111kpk+1f(k,p)=f(k,p)=f(k,p)=f(k,p)(1p)=1pp1pk+111kpk+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=0k1jωkjsf(k1,ωks)
所以右式:
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=0k1(pωks+1)nj=0k1jωkjsk1s=0k1(pωks+1)nf(k1,ωks)
所以原式:
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=0n(in)piii=0n(in)pi(imodk))k1(np(p+1)n1k1s=0k1(pωks+1)nf(k1,ωks))
代码并不难写。

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值