結果
問題 |
No.109 N! mod M
|
ユーザー |
|
提出日時 | 2023-10-02 16:52:47 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,171 bytes |
コンパイル時間 | 1,533 ms |
コンパイル使用メモリ | 194,168 KB |
最終ジャッジ日時 | 2025-02-17 04:02:06 |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 5 TLE * 1 -- * 3 |
ソースコード
#include<bits/stdc++.h> #include<time.h> using namespace std; using ll = long long; #define rep(i,n) for(ll i=0;i<ll(n);i++) #define all(A) A.begin(),A.end() using vll = vector<ll>; using vvll = vector<vll>; using vvvll = vector<vvll>; using vvvvll = vector<vvvll>; using vb = vector<bool>; using vvb = vector<vb>; using vvvb = vector<vvb>; using vvvvb = vector<vvvb>; bool DEB = 0; bool isbool(ll N){ if(N<=1)return 0; for(ll i=2;i*i<=N;i++){ if(N%i==0)return 0; } return 1; } ll modPow(ll a,ll n,ll mod){ a%=mod; if(n==0)return 1; if(n%2==1)return (modPow(a,n-1,mod)*a)%mod; ll res=modPow(a,n/2,mod); return (res*res)%mod; } void solve(){ ll N,M; cin>>N>>M; if(N>=M){ cout<<0<<endl; return; } else if(N<=5e5){ ll res=1; for(ll i=1;i<=N;i++)res=(res*i)%M; cout<<res<<endl; return; } else if(!isbool(M)){ cout<<0<<endl; return; } else{ ll res=M-1; for(ll n=M-1;n>N;n--){ res*=modPow(n,M-2,M); res%=M; } cout<<res<<endl; } } int main() { ll T; cin>>T; while(T--)solve(); }