题目 | 雪菜的式子
武汉大学2023年新生程序设计竞赛
H - 雪菜的式子
https://ac.nowcoder.com/acm/contest/66651/H
1s / 512MB
题目
雪菜定义
其中
给定
输入
第一行两个数
输出
一个整数表示答案。
样例
输入
2 2
输出
1
题解
本题需要将原问题转化一下,转化后的问题就很好求解了。
首先要对
因此,拆分结果每种质数的幂次不能
接下来,就可以对不同的
- 若
, 包含 种质数,选法 ,这 个质数分给 组合,有 种安排方式 - 若
, 包含 种质数,选法 ,这 个质数分给 组合,有 种安排方式 - 若
, 包含 种质数,选法 ,这 个质数分给 组合,有 种安排方式 - 若
, 包含 种质数,选法 ,这 个质数分给 组合,有 种安排方式
那么,最终答案便是:
根据二项式定理:
原式可以变形:
最后,使用快速幂即可解决。
需要注意的是,不要将
另外取模时,需要注意正负性。
代码
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int MOD = 998244353;
int qpow(int a, int b)
{
int ans = 1;
a %= MOD;
while (b)
{
if (b % 2)
ans = ans * a % MOD;
a = a * a % MOD;
b /= 2;
}
return ans;
}
void solve()
{
int n, k;
cin >> n >> k;
int ans = qpow(k - 1, n);
if (n % 2)
ans *= -1;
ans = (ans % MOD + MOD) % MOD;
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
// cin >> t;
while (t--)
solve();
return 0;
}
本文采用 CC BY-SA 4.0 许可,本文 Markdown 源码:Haotian-BiJi