競技プログラミング日記

主に AtCoder の記事です

AtCoder Beginner Contest 228E

ABC228E

フェルマーの小定理

問題文通りに考えると, 数列 \(A : N \rightarrow K\) の取り方は \(K^{N}\) 通り. 点数の付け方は \(K^{N} \rightarrow M\) であるから,\(M^{(K^{N})}\) 通り. よって,フェルマーの小定理で求まる.

注意

  • 底 \(M\) が \(0\) のケースはフェルマーの小定理が使えないので個別に計算する.
  • \(M\) の指数は mod \(p-1\) で求める.

使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"

using mint = ModLL<998244353>;
using mint1 = ModLL<998244352>;
 

int main() {
  ll n,k,m; cin >> n >> k >> m;

  mint mm(m);
  mint1 mk(k);

  if(mm.val() == 0) cout << 0 << endl;
  else{
    cout << mm.pow(mk.pow(n).val()).val() << endl;
  }
 

  return 0;
}