(旧存档) 牛客多校第一场-J题
J 高数签到题
思路
$\int_0^1(x-x^2)^ndx$ $=\int_0^1(\frac{1}{4}-(x-\frac{1}{2})^2)^ndx$ $=\frac{1}{4^n}\int_0^1(1-(2x-1)^2)^ndx$
令 $sin(t)=2x-1$,有$cos(t)dt=2dx$,换元得
$=\frac{1}{4^n}\int_{-\frac{\pi}{2}}^{\frac{\pi}{2}}(1-sin^2(t))^n\frac{cos(t)}{2}dt$ $=\frac{1}{4^n}\int_{0}^{\frac{\pi}{2}}cos^{2n+1}(t)dt$
由华莱士公式:
\[\int_0^{\frac{\pi}{2}}cos^n(x)dx=\left\{ \begin{aligned} \frac{(2k-1)!!}{(2k)!!}\frac{\pi}{2} && n=2k \\ \frac{(2k)!!}{(2k+1)!!} && n=2k+1 \\ \end{aligned} \right.\]于是: $\int_0^1(x-x^2)^ndx$ $=\frac{1}{4^n}\cdot\frac{(2n)!!}{(2n+1)!!}$ $=\frac{(n!)^2}{(2n+1)!}$
代码
#include <iostream>
using namespace std;
using ll = long long;
const ll MOD = 998244353;
const int N = 2e6 + 5;
ll fac[N];
ll quick_pow(ll a, ll b) {
ll ret = 1;
while(b) {
if (b & 1) ret = ret * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return ret;
}
ll divm(ll x, ll y) {
return x % MOD * quick_pow(y, MOD - 2) % MOD;
}
ll init() {
fac[0] = 1;
for (int i = 1; i < N; ++i)
fac[i] = fac[i - 1] * i % MOD;
}
int main() {
int n;
init();
while(cin >> n) {
cout << divm(fac[n] * fac[n], fac[2 * n + 1])<< endl;
}
return 0;
}