nowcoder-contest/5666/J

1 题目描述

  • Given n, find the value of
    It can be proved that the value is a rational number ​.
    Print the result as mod998244353.

2 分析

  • 本题是一个积分题,的意思是求出q的逆元,要这么理解,然后乘以p,再mod。

    关键是我们求这个积分,这个积分可以进行如下化简:

    于是我们可以预处理所有阶乘mod998244353的值,逆元可以用费马小定理或者扩欧来做。

3 代码

#include<bits/stdc++.h>
using namespace std;  
int const N=2e6+10;  
int const M=998244353;
int f[N],n;  
int ksm(int x,int y){
    int res=1;  
    while (y) {
        if(y&1) res=1LL*res*x%M;  
        y>>=1; 
        x=1LL*x*x%M;  
    }
    return res;  
}
int main(){
    f[0]=1;  
    for(int i=1;i<N;i++)
        f[i]=1LL*f[i-1]*i%M;  
    while (scanf("%d",&n)==1){
        printf("%d\n",1LL*f[n]*f[n]%M *ksm(f[2*n+1],M-2)%M);  
    }
    return 0; 
}