Codeforces 1359 E. Modular Stability

在這裏插入圖片描述

題意:

給出 nnkk ,要求在 [1,n][1, n] 中找出不同的 kk 個數,使得
在這裏插入圖片描述
有規律,所有 aia_i 必須能被最小值 a1a_1 整除。只要枚舉 a1a_1 的值,然後計算組合數就行了。

證明一下:假設有一個數爲 ata_t 不能被 a1a_1 整除,那麼設 x=atx=a_t,則 x%a1...%at0x\%a_1...\%a_t≠0x%at=0x\%a_t=0

AC代碼:

const int N = 5e5 + 50;
int n, k;
const int mod = 998244353;
int F[N], Finv[N], inv[N]; //F是階乘,Finv是逆元的階乘

void init()
{
	inv[1] = 1;
	for (int i = 2; i < N - 10; i++)
	{
		inv[i] = (mod - mod / i) * 1ll * inv[mod % i] % mod;
	} //遞推求逆元
	F[0] = Finv[0] = 1;
	for (int i = 1; i < N - 10; i++)
	{
		F[i] = F[i - 1] * 1ll * i % mod;
		Finv[i] = Finv[i - 1] * 1ll * inv[i] % mod;
	}
}

int comb(int n, int m) //comb(n, m)就是C(n, m)
{
	if (m < 0 || m > n)
		return 0;
	return F[n] * 1ll * Finv[n - m] % mod * Finv[m] % mod;
}

int main()
{
	int T;
	sdd(n, k);
	init();
	int ans = 0;
	rep(i, 1, n)
	{
		ans += comb(n / i - 1, k - 1) % mod;
		ans %= mod;
	}
	pd(ans);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章