結果
| 問題 | 
                            No.2380 Sylow P-subgroup
                             | 
                    
| コンテスト | |
| ユーザー | 
                             srjywrdnprkt
                         | 
                    
| 提出日時 | 2023-07-20 17:03:18 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 2 ms / 2,000 ms | 
| コード長 | 662 bytes | 
| コンパイル時間 | 1,711 ms | 
| コンパイル使用メモリ | 192,896 KB | 
| 最終ジャッジ日時 | 2025-02-15 15:54:42 | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge3 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 14 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll mod_exp(ll b, ll e, ll m){
    if (e > 0 && b == 0) return 0;
    ll ans = 1;
    b %= m;
    while (e > 0){
        if ((e & 1LL)) ans = (ans * b) % m;
        e = e >> 1LL;
        b = (b*b) % m;
    }
    return ans;
}
const ll m1 = 998244352;
const ll m2 = 998244353;
ll Legendre(ll X, ll p){
    ll cnt=0, q=p;
    while(X/q > 0){
        cnt += (X/q) % m1;
        cnt %= m1;
        if (q <= X/p) q *= p;
        else break;
    }
    return cnt;
}
int main(){
    ll N, P, e;
    cin >> N >> P;
    e = Legendre(N, P);
    cout << mod_exp(P, e, m2) << endl;
    return 0;
}
            
            
            
        
            
srjywrdnprkt