2020牛客暑期多校训练营(第一场)J.Easy Integration

2020牛客暑期多校训练营(第一场)J.Easy Integration

题目链接

题目描述

Given n, find the value of ∫ 0 1 ( x − x 2 ) n d x \int_{0}^1 (x - x^2)^n \mathrm{d} x 01(xx2)ndx
It can be proved that the value is a rational number p q \frac{p}{q} qp.
Print the result as ( p ⋅ q − 1 )   m o d   998244353 (p \cdot q^{-1}) \bmod 998244353 (pq1)mod998244353.

输入描述:

The input consists of several test cases and is terminated by end-of-file.
Each test case contains an integer n.

1 ≤ n ≤ 1 0 6 1 \leq n \leq 10^6 1n106

The number of test cases does not exceed 1 0 5 10^5 105

输出描述:

For each test case, print an integer which denotes the result.

示例1

输入

1
2
3

输出

166374059
432572553
591816295

这道题比较考验思维,不是说你求积的思维而是你找答案的思维,坦白说,这个定积分我一个高数上下满绩,数竞二等奖的人都不会,你们就千万别傻傻地死磕积分妄图求原函数了(数学大佬当我没说),赶紧,赶紧,赶紧找规律!!!
n = 1 , 2 , 3 , 4 n=1,2,3,4 n=1,2,3,4 时的定积分一求,分子为 1 1 1,分母为 6 , 30 , 140 , 630 6,30,140,630 6,30,140,630,然后赶紧上 O E I S OEIS OEIS 搜一下公式,发现就是 ( 2 n + 1 ) ! ( n ! ) 2 \frac{(2n+1)!}{(n!)^2} (n!)2(2n+1)!,所以说网络赛脑子要灵光一些,学会利用网络的优势,输出就是求个逆元,阶乘预处理一下即可,AC代码如下:

#include
using namespace std;
typedef long long  ll;
const ll N=2e6+5;
const ll mod=998244353;
ll power(ll a,ll b){return b?power(a*a%mod,b/2)*(b%2?a:1)%mod:1;}
ll f[N],n;
void pre(){
    f[0]=1;
    for(ll i=1;i<=N;i++){
        f[i]=i*f[i-1]%mod;
    }
}

int main(){
    pre();
    while(~scanf("%lld",&n)){
        printf("%lld\n",power(f[2*n+1]*power(power(f[n],2),mod-2)%mod,mod-2));
    }
	return 0;
}

你可能感兴趣的:(牛客,数论)