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})\). 预处理即可.

浙公网安备 33010602011771号