結果
問題 | No.2351 Butterfly in Summer |
ユーザー |
![]() |
提出日時 | 2024-03-30 20:31:42 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,081 bytes |
コンパイル時間 | 1,127 ms |
コンパイル使用メモリ | 111,020 KB |
最終ジャッジ日時 | 2025-02-20 16:02:46 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
#define _USE_MATH_DEFINES #include <iostream> #include <string> #include <algorithm> #include <vector> #include <queue> #include <math.h> #include <cmath> #include <stack> #include <map> #include <set> #include <numeric> #include <iomanip> #include <climits> #include <functional> #include <cassert> #include <tuple> using namespace std; using ll = long long; ll N, K; ll mod = 998244353; //ループの回数は適宜修正 ll power(ll a, ll b, ll m) { ll p = a, ans = 1; for(int i = 0; i < 60; i++) { ll wari = (1LL << i); if((b / wari) % 2 == 1) { ans = (ans * p) % m; } p = (p * p) % m; } return ans; } /* フェルマーの小定理を利用して、徐算a/bの答えを素数Mで割ったあまりを算出 a,bはllとしているが、m以上の場合はそれぞれa%m,b%mで渡す */ ll division(ll a, ll b, ll m) { return ((a % m) * power(b, m-2, m)) % m; } int main() { cin >> N >> K; ll b = division(1, power(K,N,mod), mod); ll a = N*K*(K-1)%mod; cout << (a*b)%mod << endl; }