結果
問題 | No.109 N! mod M |
ユーザー |
|
提出日時 | 2023-10-02 16:57:08 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 96 ms / 5,000 ms |
コード長 | 1,309 bytes |
コンパイル時間 | 1,519 ms |
コンパイル使用メモリ | 193,832 KB |
最終ジャッジ日時 | 2025-02-17 04:02:21 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 9 |
ソースコード
#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(M==1){cout<<0<<endl;}else if(N==0){cout<<1<<endl;}else 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;ll pm=1;for(ll n=M-1;n>N;n--){pm*=n;pm%=M;}pm=modPow(pm,M-2,M);res*=pm;res%=M;cout<<res<<endl;}}int main() {ll T;cin>>T;while(T--)solve();}