2025.02.25 CW 模拟赛 A. 数论

题面 & 题解

A. 数论

题意

给定 \(n, p\), 让你求:

\[\sum_{i = 1}^n \sum_{j = 1}^p \varphi(i^j) \mod 10^9 + 7 \]

其中 \(n \le 10^7, p \le 10^9\).

思路

首先我们可以线性处理逆元, 并筛出 \(2 \sim 10^7\) 的欧拉函数值.

inv[1] = 1;
for (int i = 2; i <= 1e7; ++i)
	inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
for (int i = 2; i <= 1e7; ++i) {
	if (!vis[i]) {
		prime[++c] = i;
		is_prime[i] = true;
		vis[i] = true;
		phi[i] = i - 1;
	}
	for (int j = 1; j <= c and i * prime[j] <= 1e7; ++j) {
		vis[i * prime[j]] = true;
		if (!(i % prime[j])) {
			phi[i * prime[j]] = phi[i] * prime[j];
			break;
		}
		phi[i * prime[j]] = phi[i] * phi[prime[j]];
	}
}

由于欧拉函数是积性函数 \((\)详见OI Wiki\()\), 所以我们有 \(\displaystyle \varphi(n) = \prod \varphi(p_i^{\alpha_i})\). 预处理即可.

posted @ 2025-02-25 19:57  Steven1013  阅读(9)  评论(0)    收藏  举报