专栏文章

CF1359E Modular Stability 题解

CF1359E题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minhv5li
此快照首次捕获于
2025/12/02 02:40
3 个月前
此快照最后确认于
2025/12/02 02:40
3 个月前
查看原文
注意到,xmodp1modp2modmodpnx\bmod p_1 \bmod p_2\bmod \cdots \bmod p_n 无论怎么变换 pp 的顺序结果不变,那么 p1p_1 为最小值,所有 pip_i 一定是某个正整数 dd 的倍数。于是只需要预处理一下逆元,并枚举 dd 用组合数求结果即可。
代码:
CPP
#include <bits/stdc++.h>

using namespace std;

const int M = 1e6 + 5, mod = 998244353;

long long jc[M], jcinv[M], ans;
int n, k;

int C(int n, int m)
{
	return jc[n] * jcinv[m] % mod * jcinv[n - m] % mod;
}

long long ksm(long long a, int b)
{
	long long c = 1;
	while (b)
	{
		if (b & 1) c = c * a % mod;
		a = a * a % mod;
		b >>= 1;
	}
	return c;
}

int main()
{
	jc[0] = 1;
	jcinv[0] = 1;
	for (int i = 1; i <= M - 5; i ++ )
	{
		jc[i] = jc[i - 1] * i % mod;
		jcinv[i] = ksm(jc[i], mod - 2);
	}
	cin >> n >> k;
	for (int i = 1; i <= n; i ++ )
	{
		if (n / i < k) break;
		ans = (ans + C(n / i - 1, k - 1)) % mod;
	}
	cout << ans << endl;
	return 0;
}



评论

0 条评论,欢迎与作者交流。

正在加载评论...