\(\Gamma\) 函数
引入、定义
在计算组合数式子的时候,我们时常会看到这样的式子:
\[\frac{(-2n)!((-n/2)!)^2}{((-n)!)^3}
\]
然而,我们不知道什么是负数或者什么其他数的阶乘。这里必须引入一个特殊函数——\(\Gamma\) 函数。
\[\Gamma(z)=\int_0^{\infty}t^{z-1}e^{-t}dt(\Re(z)>0)
\]
有
\[\Gamma(z)=-\int _0^{\infty}t^{z-1}de^{-t}=(z-1)\int _0^{\infty}e^{-t}t^{z-2}dt-\left[t^{z-1}e^{-t}\right]_0^{\infty}=(z-1)\Gamma(z-1)
\]
那么可以归纳得知
\[\Gamma(z)=(z-1)! (z\in \N^+)
\]
根据上面的结果,我们可以对 \(\Gamma(z)\) 延拓至全体实数,除了负整数。
但是可以计算 \(\Gamma(z)\) 在 \(z=-n\) 处的留数:
\[Res(\Gamma(z);-n)=\lim_{z\to -n}(z+n)\Gamma(z)=\lim_{z\to -n}\frac{\Gamma(z+n+1)}{z(z+1)\dots (z+n+1)}=\frac{(-1)^n}{n!}
\]
欧拉无穷乘积:
令
\[H_n(z)=\int _0^n(1-\frac{t}{n})t^{z-1}dt
\]
有
\[\lim _{n\to\infty}H_n(z)=\Gamma(z)
\]
证明:
首先注意到
\[e^{-t}=\lim_{n\to\infty}(1-\frac t n)^n
\]
然后两式相减。
\[\Gamma(z)-\lim_{n\to \infty} H_n(z)\\
=\lim_{n\to \infty}\left(\int_0^n(e^{-t}-(1-\frac t n)^n)t^{z-1}dt-\int _n^{\infty}e^{-t}t^{z-1}dt\right)\\
=\lim_{n\to \infty}\int_0^n\left[e^{-t}-(1-\frac t n)^n\right]t^{z-1}dt
\]
熟知不等式
\[1+t\le e^{-t}\le \frac{1}{1-t},t>0
\]
故
\[\le e^{-t}-(1-\frac{t}n)^n=e^{-t}\left(1-e^t(1-\frac{t}n)^n\right)\\
\le e^{-t}\left(1-e^t(1-\frac{t^2}{n^2})^n\right)
\]
根据伯努利不等式 \((1-x)^n\ge 1-nx(x\in [0,1])\)。
\[e^{-t}-(1-\frac{t}n)^n\le \frac{e^{-t}t^2}{n}
\]
于是
\[\lim_{n\to\infty} \left|\int_0^n\left[e^{-t}-(1-\frac t n)^n\right]t^{z-1}dt\right|\\
\le \lim_{n\to\infty} \left|\frac 1 n\int_0^ne^{-t}t^{z+1}dt\right|\\
=0
\]
证毕。
而在
\[H_n(z)=\int _0^n(1-\frac{t}{n})t^{z-1}dt
\]
中,令 \(\frac{t}n\to t\),得到
\[H_n(z)=n^z\int _0^1(1-t)^nt^{z-1}dt
\]
这个式子可以分部积分然后转为递推式,最终得到:
\[H_n(z)=\frac{n!n^z}{z(z+1)\dots (z+n)}
\]
尝试代入上面证明的式子:
\[\Gamma(z)=\lim_{n\to \infty}\frac{n!n^z}{z(z+1)\dots (z+n)}\\
=\lim_{n\to \infty}\frac{1}{z}\left(\prod_{i=1}^n\frac{i}{z+i}\right)\left(\prod_{i=1}^{n-1} (1+\frac{1}{i})^z\right)\\
=\frac{1}{z}\prod_{i=1}^{\infty}\left(\frac{k}{z+k}(1+\frac 1 k)^z\right)\\
=\color{red}{\frac{1}{z}\prod_{n=1}^{\infty}\left(\left(1+\frac{z}{n}\right)^{-1}\left(1+\frac 1 n\right)^z\right)}
\]
这是欧拉无穷乘积。
魏氏无穷乘积
欧拉无穷乘积得到
\[\Gamma(z)=\frac 1 z\prod _{k\ge 1}(1+\frac z k)^{-1}\left(\lim_{n\to\infty}n^z\right)
\]
考虑 \(n^z\)。
\[n^z=\exp(z\ln n)=\exp(z(\ln n-\sum_{k=1}^n\frac 1 k)+\sum _{k=1}^n\frac zk)\\
=\prod_{k=1}^n e^{\frac zk}\times \exp(z(\ln n-\sum _{k=1}^n\frac1k))\\
\lim _{n\to\infty}n^z=\prod_{k=1}^n e^{\frac zk}\times e^{-\gamma z}
\]
所以
\[\color{red}{\Gamma(z)=\frac 1 ze^{-\gamma z}\prod_{k=1}^{\infty}(1+\frac zk)^{-1}e^{\frac zk}}
\]
这是魏氏无穷乘积。
余元公式
考虑
\[\Gamma(z)\Gamma(-z)=-\frac{1}{z^2}\prod_{k=1}^{\infty}(1-\frac{z^2}{k^2})^{-1}
\]
而有(根据 \(\cot\) 的展开式积分(?),\(\ln\sin x'=\cot x\))
\[\frac{\sin \pi z}{\pi z}=\prod_{k=1}^{\infty}(1-\frac{z^2}{k^2})
\]
那么
\[\Gamma(z)\Gamma(-z)=-\frac{\pi}{z\sin \pi z}
\]
有 \(\Gamma(-z)=-z\Gamma(1-z)\),则:
\[\color{red}{\Gamma(z)\Gamma(1-z)=\frac{\pi}{\sin \pi z}}
\]
直接取 \(z=\frac 12\) 然后就可以顺便得到余元公式。
OI 的应用大概到这里就结束了。
据此可以得到一个重要结论:
\[\sum_{n\ge 0}[\frac{x^n}{n!}]F(x)=\int _0^{+\infty} F(x)e^{-x}dx
\]
\(\Beta\) 函数
定义:
\[\Beta(p,q)=\int _0^1x^{p-1}(1-x)^{q-1}dx
\]
性质 1:\(\Beta(p,q)=\Beta(q,p)\),显然。
性质 2:\(\Beta(p,q)=\dfrac{\Gamma(p)\Gamma(q)}{\Gamma(p+q)}\)。
证明:考虑
\[\Gamma(p)\Gamma(q)=\int_0^{+\infty}t^{p-1}e^{-t}dt\int_0^{+\infty}s^{q-1}e^{-s}ds\\
\text{令 }t=x^2,s=y^2\\
\Gamma(p)\Gamma(q)=4\int_0^{+\infty}x^{2p-1}e^{-x^2}dx\int_0^{+\infty}y^{2p-1}e^{-y^2}dy\\
=4\int_0^{+\infty}\int_0^{+\infty}x^{2p-1}y^{2p-1}e^{-(x^2+y^2)}dxdy\\
\text{令 }x=r\cos \theta,y=r\sin\theta\\
=4\int_0^{+\infty}e^{-r^2}r^{2(p+q)-1}dr\int _0^{\frac\pi 2}(\cos \theta)^{2p-1}(\sin \theta)^{2q-1} d\theta\\
\text{令 } t=r^2,x=\cos^2\theta\\
=-\int_0^{+\infty}e^{-t}t^{p+q-1}dt\int _1^0x^{p-1}(1-x)^{q-1} dx\\
=\int_0^{+\infty}e^{-t}t^{p+q-1}dt\int _0^1x^{p-1}(1-x)^{q-1} dx\\
=\Gamma(p+q)\Beta(p,q)
\]
那么 \(B(p,q)=\dfrac{\Gamma(p)\Gamma(q)}{\Gamma(p+q)}=\dfrac{(p-1)!(q-1)!}{(p+q-1)!}\)。
可以计算:取值 \([0,1]\) 的 \(n\) 个连续随机变量的 \(k\) 小。
首先设此随机变量为 \(X\)。设其概率密度函数为 \(f(x)\),概率分布函数为 \(F(x)=P(X\le x)\)。
\[E[X]=\int_0^1xf(x)dx=\int_0^1xdF(x)\\
=[xF(x)] _0^1-\int_0^1F(x)dx\\
=1-\int _0^1F(x)dx=\int_0^1(1-F(x))dx
\]
考虑 \(P(X\ge x)\),即至多有 \(m-1\) 个 \(<x\)。
\[1-F(x)=\sum_{i=0}^{m-1}\binom ni x^i(1-x)^{n-i}\\
\int _0^1(1-F(x))dx=\sum_{i=0}^{m-1}\binom ni\int_0^1x^i(1-x)^{n-i}dx\\
=\sum_{i=0}^{m-1}\Beta(i+1,n-i+1)\binom ni\\
=\sum _{i=0}^{m-1}\frac 1{n+1}=\frac{m}{n+1}
\]
ABC226H
考虑求出答案属于 \([x,x+1]\),且有 \(b\) 个落在中间的概率。
设 \(dp(a,b,c)\) 为 \(a\) 个 \(<x\),\(b\) 个 \(\in[x,x+1]\),\(c\) 个 \(>x+1\) 的概率,容易 dp。
利用上面的公式容易求答案。
// Problem: [ABC226H] Random Kth Max
// Platform: Luogu
// URL: https://www.luogu.com.cn/problem/AT_abc226_h
// Memory Limit: 1 MB
// Time Limit: 2000 ms
// Author:British Union
// Long live UOB and koala
//
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=105,mod=998244353;
int qp(int a,int b){
if(b==0)return 1;
int T=qp(a,b>>1);
T=T*T%mod;
if(b&1)return T*a%mod;
return T;
}
int inv[maxn],n,k,dp[55][55][55],l[maxn],r[maxn],E=0;
struct st{
int a,b,c;
st(int x=0,int y=0,int z=0){
a=x,b=y,c=z;
}
};
vector<st> sts[maxn];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>k;k=n-k+1;
for(int i=1;i<=n;i++)cin>>l[i]>>r[i];
for(int i=1;i<=100;i++)inv[i]=qp(i,mod-2);
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++){
for(int k=0;k<=n;k++){
if(i+j+k<=n)sts[i+j+k].push_back(st(i,j,k));
}
}
}
for(int i=0;i<100;i++){
memset(dp,0,sizeof(dp));
dp[0][0][0]=1;
for(int j=1;j<=n;j++){
for(auto V:sts[j]){
int a=V.a,b=V.b,c=V.c;
if(r[j]<=i){
if(a)dp[a][b][c]=dp[a-1][b][c];
}
else if(l[j]>=i+1){
if(c)dp[a][b][c]=dp[a][b][c-1];
}
else{
int L=r[j]-l[j];
if(b)dp[a][b][c]+=dp[a][b-1][c]%mod;
if(a)dp[a][b][c]+=dp[a-1][b][c]*(i-l[j])%mod;
if(c)dp[a][b][c]+=dp[a][b][c-1]*(r[j]-i-1)%mod;
dp[a][b][c]=dp[a][b][c]*inv[L]%mod;
}
}
}
for(auto V:sts[n]){
int a=V.a,b=V.b,c=V.c;
if(a+b>=k&&a<k&&dp[a][b][c]!=0){
E+=(i+(k-a)*inv[b+1])%mod*dp[a][b][c]%mod;
E%=mod;
}
}
}
cout<<E<<endl;
return 0;
}