AtCoder TOYOTA SYSTEMS Programming Contest 2021(AtCoder Beginner Contest 228) E - Integer Sequence Fair

思路:
对于从K个数中选取长度为N的序列,每一个数都有N个选择,所以总共有K的N次选择,每次选择又有M个数可以选择,所以有M的K的N次选择,由于K的N次过大,不可直接用快速幂,所以采用欧拉降幂,具体推导如图:

顺便放个欧拉降幂公式:

代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<int, int> PII;
const int N = 3e5 + 10, mod = 998244353;
ll n, k, m;
ll qmi(ll a, ll b, ll p)
{
ll ret = 1, base = a % p;
while(b)
{
if(b & 1) ret = ret * base % p;
base = base * base % p;
b >>= 1;
}
return ret % p;
}
void solve()
{
cin >> n >> k >> m;
if(m % mod == 0)
cout << 0 << endl;
else
{
ll num = qmi(k, n, mod - 1);
ll ans = qmi(m, num, mod);
cout << ans << endl;
}
}
int main()
{
ios::sync_with_stdio(0);
//int T;
//cin >> T;
//while(T --)
//{
solve();
//}
return 0;
}

浙公网安备 33010602011771号