一个数很大,并不能预处理,所以要进行公式变换,存前一个的值就好
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MD=998244353,N=1e6+5; ll n,m,inv[N]; int main() { inv[0]=inv[1]=1; int T,ca=0; ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>T; for(int i=2; i<N; ++i) inv[i]=(MD-MD/i)*inv[MD%i]%MD; while(T--) { cin>>n>>m; ll ans=m%MD,t=m%MD; for(int i=1;i<n&&i<m;i++) { t=t*(m%MD-i)%MD*(n%MD-i)%MD*inv[i]%MD; ans=(ans+t)%MD; } cout<<"Case #"<<++ca<<": "<<ans<<" "; } }