牛客训练赛52 A题

解题思路
打表+快速幂

#include<iostream>
using namespace std;
#define maxn 10000005
long long fac_num[maxn]={0};


void fac(long long n)
{
    for(long long i=2;i<=n;i++)
    {
        fac_num[i-1]=(fac_num[i-2]*i)%998244353;
    }
}

long long binaryPow(long long a,long long b,long long m)
{
    if(b==0) return 1;
    if(b%2==1) return a*binaryPow(a,b-1,m)%m;
    else
    {
        long long mul=binaryPow(a,b/2,m);
        return mul*mul%m;
    }
}

int main()
{
    int T;
    fac_num[0]=1;
    fac(maxn);
    while(scanf("%d",&T)!=EOF)
    {
        while(T--)
        {
            long long n;
            scanf("%lld",&n);
            long long sum=((1+n)*n/2)%998244353;
            sum=sum*sum;
            printf("%d ",sum%998244353);
            printf("%d%c",binaryPow(fac_num[n-1],2*n,998244353),"\n"[T==0]);
        }
    }
    return 0;
 }