【难度】
4/10
数学题/或找规律题
【题意】
求出
I
n
I_n
In
其中
I
n
=
∫
0
1
(
x
−
x
2
)
n
d
x
\pmb{I_n=\int_0^1(x-x^2)^n\,dx}
In=∫01(x−x2)ndxIn=∫01(x−x2)ndxIn=∫01(x−x2)ndx
【数据范围】
T组样例
T
≤
1
e
5
T\le1e5
T≤1e5
n
≤
1
e
6
n\le1e6
n≤1e6
【输入样例】
1
2
3
【输出样例】
166374059
432572553
591816295
【解释】
I 1 = ∫ 0 1 ( x − x 2 ) d x = 1 6 \pmb{I_1=\int_0^1(x-x^2)\,dx=\frac{1}{6}} I1=∫01(x−x2)dx=61I1=∫01(x−x2)dx=61I1=∫01(x−x2)dx=61
【思路】
据说是wallis integral ,但是看了公式页许久也不知道为什么
我们利用分部积分做。
即:
∫
a
b
u
v
′
d
x
=
u
v
∣
a
b
∫
a
b
u
′
v
d
x
\int_a^buv'\,dx=uv\Big |_a^b \int_a^bu'vdx
∫abuv′dx=uv∣∣∣ab∫abu′vdx
接下来先化简公式再进行运算:
I
n
=
∫
0
1
(
x
−
x
2
)
n
d
x
=
∫
0
1
x
n
(
1
−
x
)
n
d
x
=
1
n
+
1
x
n
+
1
(
1
−
x
)
n
∣
0
1
+
∫
0
1
n
(
1
−
x
)
n
−
1
1
n
+
1
x
n
+
1
d
x
=
∫
0
1
n
(
1
−
x
)
n
−
1
1
n
+
1
x
n
+
1
d
x
(
左
边
项
为
0
)
⋮
(
n
次
分
部
积
分
后
)
I
n
=
n
∗
(
n
−
1
)
∗
(
n
−
2
)
∗
⋯
∗
2
∗
1
(
n
+
1
)
∗
(
n
+
2
)
∗
⋯
∗
(
2
n
)
∫
0
1
(
1
−
x
)
0
x
2
n
d
x
=
n
∗
(
n
−
1
)
∗
(
n
−
2
)
∗
⋯
∗
2
∗
1
(
n
+
1
)
∗
(
n
+
2
)
∗
⋯
∗
(
2
n
)
1
2
n
+
1
x
2
n
+
1
∣
0
1
=
n
∗
(
n
−
1
)
∗
(
n
−
2
)
∗
⋯
∗
2
∗
1
(
n
+
1
)
∗
(
n
+
2
)
∗
⋯
∗
(
2
n
+
1
)
=
(
n
!
)
2
(
2
n
+
1
)
!
\begin{aligned} I_n&=\int_0^1(x-x^2)^n\,dx\\ &=\int_0^1x^n(1-x)^n\,dx\\ &=\frac{1}{n+1}x^{n+1}(1-x)^{n}\Bigg |_0^1 \ +\int_0^1n(1-x)^{n-1}\frac{1}{n+1}x^{n+1}\,dx\\ &=\int_0^1n(1-x)^{n-1}\frac{1}{n+1}x^{n+1}\,dx \qquad (左边项为0)\\ \end{aligned}\\ \vdots\qquad(n次分部积分后)\\ \ \\ \begin{aligned} I_n &= \frac{n*(n-1)*(n-2)*\cdots*2*1}{(n+1)*(n+2)*\cdots*(2n)}\int_0^1(1-x)^0x^{2n}\,dx\\ &= \frac{n*(n-1)*(n-2)*\cdots*2*1}{(n+1)*(n+2)*\cdots*(2n)}\frac{1}{2n+1}x^{2n+1}\Bigg |_0^1 \\ &= \frac{n*(n-1)*(n-2)*\cdots*2*1}{(n+1)*(n+2)*\cdots*(2n+1)}\\ &=\frac{(n!)^2}{(2n+1)!} \end{aligned}
In=∫01(x−x2)ndx=∫01xn(1−x)ndx=n+11xn+1(1−x)n∣∣∣∣∣01 +∫01n(1−x)n−1n+11xn+1dx=∫01n(1−x)n−1n+11xn+1dx(左边项为0)⋮(n次分部积分后) In=(n+1)∗(n+2)∗⋯∗(2n)n∗(n−1)∗(n−2)∗⋯∗2∗1∫01(1−x)0x2ndx=(n+1)∗(n+2)∗⋯∗(2n)n∗(n−1)∗(n−2)∗⋯∗2∗12n+11x2n+1∣∣∣∣∣01=(n+1)∗(n+2)∗⋯∗(2n+1)n∗(n−1)∗(n−2)∗⋯∗2∗1=(2n+1)!(n!)2
接下来我们只要先预处理出阶乘数组与阶乘逆元数组
【核心代码】
/*
_ __ __ _ _
| | \ \ / / | | (_)
| |__ _ _ \ V /__ _ _ __ | | ___ _
| '_ \| | | | \ // _` | '_ \| | / _ \ |
| |_) | |_| | | | (_| | | | | |___| __/ |
|_.__/ \__, | \_/\__,_|_| |_\_____/\___|_|
__/ |
|___/
*/
const int MAX = 2e6+50;
const ll MOD = 998244353;
ll qpow(ll a,ll n){/* */ll res = 1LL;while(n){if(n&1)res=res*a%MOD;a=a*a%MOD;n>>=1;}return res;}
ll qpow(ll a,ll n,ll p){ll res = 1LL;while(n){if(n&1)res=res*a%p;a=a*a%p;n>>=1;/**/}return res;}
ll inv(ll a){/* */return qpow(a,MOD-2);}
ll inv(ll a,ll p){return qpow(a,p-2,p);}
ll fac[MAX];
ll inv_fac[MAX];
void init(int n){
fac[0]=1LL;
for(int i=1;i<=n;++i){
fac[i]=(fac[i-1]*i)%MOD;
}
inv_fac[n]=inv(fac[n]);
for(int i=n-1;i>=1;--i){
inv_fac[i]=(inv_fac[i+1]*(i+1))%MOD;
}
}
int main()
{
init(MAX-50);
ll n;
while(cin >> n){
cout << (fac[n]*fac[n])%MOD*inv_fac[2*n+1]%MOD << endl;
}
return 0;
}