結果
| 問題 |
No.109 N! mod M
|
| ユーザー |
|
| 提出日時 | 2025-06-24 14:56:39 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 111 ms / 5,000 ms |
| コード長 | 1,184 bytes |
| コンパイル時間 | 2,254 ms |
| コンパイル使用メモリ | 196,160 KB |
| 実行使用メモリ | 7,844 KB |
| 最終ジャッジ日時 | 2025-06-24 14:56:43 |
| 合計ジャッジ時間 | 3,170 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define FOR(i, n) for (ll i = 0; (i) < (ll)(n); ++(i))
#define FOR3(i, m, n) for (ll i = (m); (i) < (ll)(n); ++(i))
#define FOR_R(i, n) for (ll i = (ll)(n)-1; (i) >= 0; --(i))
#define FOR3_R(i, m, n) for (ll i = (ll)(n)-1; (i) >= (ll)(m); --(i))
template<class T> void dump(T x){ cout<<x<<endl;}
void extended_euclid(ll x,ll y,ll *c,ll *a,ll *b){
ll a0,a1,a2,b0,b1,b2,r0,r1,r2,q;
r0=x; r1=y; a0=1; a1=0; b0=0; b1=1;
while(r1>0){
q=r0/r1; r2=r0%r1; a2=a0-q*a1; b2=b0-q*b1;
r0=r1; r1=r2; a0=a1; a1=a2; b0=b1; b1=b2;
}
*c=r0; *a=a0; *b=b0;
}
ll get_inv(ll n, ll p){
ll a,b,c;
extended_euclid(n,p,&c,&a,&b);
if(a<p) a+=p;
return a%p;
}
void solve(){
ll N,M; cin>>N>>M;
if(N>=M) return dump(0);
if(N<=300000){
ll res=1%M;
FOR3(i,1,N+1) res=res*i%M;
return dump(res);
}
FOR3(i,2,sqrt(M)+1){
if(M%i==0) return dump(0);
}
ll res=M-1;
ll mul=1;
FOR3_R(i,N+1,M){
mul=mul*i%M;
}
dump(res*get_inv(mul,M)%M);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int t=1; cin>>t;
for(;t--;) solve();
}