結果

問題 No.109 N! mod M
ユーザー pessimist
提出日時 2025-06-24 14:53:47
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,184 bytes
コンパイル時間 2,183 ms
コンパイル使用メモリ 196,292 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-06-24 14:53:51
合計ジャッジ時間 3,151 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 6 WA * 3
権限があれば一括ダウンロードができます

ソースコード

diff #

#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();
}
0