这道题,你把每个写出来,可以发现可以提出来;然后直接预处理+快速幂就AC了:
对于加法:
提公因子,然后发现就是等差数列,然后把(1+2+…+n)再统一提出来,就可以发现其实就是这个东东(1+2+…+n)的平方,所以直接等差数列然后Mod就行了;
对于乘法也是一样的思路,化简出来就是(123…*n)的2n次方,快速幂的时候取n就行了算出来两个相乘就是ans2了;
AC代码:
#include<cstdio>
#include<iostream>
using namespace std;
const int Mod=998244353;
long long qp(long long x,long long n){
long long res=1;
while(n){
if(n&1){
res=(res*x)%Mod;
}
x=(x*x)%Mod;
n>>=1;
}
return res;
}
long long fac[10000010];
void save(){///预处理1--1e7+5的阶乘
fac[1]=1;
for(long long i=2;i<=1e7+5;i++){
fac[i]=i*fac[i-1]%Mod;
}
}
int main(){
long long t,n;
save();
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
long long tt=1 ,ans=(n*(n+1)/2)%Mod;
ans=(ans*ans)%Mod;
tt= fac[n];
tt=qp(tt,n);
tt=(tt*tt)%Mod;
printf("%lld %lld\n",ans,tt);
}
return 0;
}