CF2147G Modular Tetration(数论,线性筛,*)
Let \(T = a ^ {a ^ {a ^ {. ^ {. ^ .}}}}\),
\[T \equiv 1 \pmod m \leftrightarrow a = 1 \lor (a \perp m \land T \equiv 0 \pmod {\varphi(m)}) \leftrightarrow a\perp m \land \mathbb{L}(\text{ord}_m(a)) | a
\]
\[\begin{aligned}
\text{Density} &= \frac{1}{m\varphi(m)}\sum_{a \le m \varphi(m) \land a\perp m} [\mathbb{L}(\text{ord}_m(a)) | a]\\
&= \frac{1}{m\varphi(m)}\sum_{x | \varphi(m) \land x\perp m} \sum_{a \le m\varphi(m)} [\text{ord}_m(a \bmod m) = x \land \mathbb{L}(x) | a]\\
&= \frac{1}{m}\sum_{x | \varphi(m) \land x\perp m} \frac{\text{cnt}_m(x)}{\mathbb{L}(x)}\\
\end{aligned}
\]
Where \(\text{cnt}_m(x) = \sum_{a \le m} [\text{ord}_m(a) = x]\).
For \(p \in \mathbb{P}\land p \ge 3, u = p ^ \alpha:\)
\[\forall 1 \le i < u \land i \perp u: i = f(k) = g ^ k, \text{ord}_u(i) = \frac{\varphi(u)}{\gcd(\varphi(u), k)}
\]
\[\therefore \text{cnt}_u(x) = \varphi(x)
\]
Suppose that \(m = \prod_{i = 1} ^ {|p|} p_i ^ {\alpha_i}\),
let \(k | \varphi(m)\land k \perp m: s(m, k) = \sum_{x | k} \text{cnt}_m(x)\):
since \(\varphi * 1 = id\), \(s(p_i ^ {\alpha_i}, k) = \sum_{x | k} \varphi(x) = k\), so
\[\begin{aligned}
s(m, k) &= \sum_{a \le m} [a ^ k \equiv 1 \pmod m]\\
&= \sum_{a \le m} \prod_{i = 1} ^ {|p|} [a ^ k \equiv 1 \pmod {p_i ^ {\alpha_i}}]\\
&= \sum_{a \le m} \prod_{i = 1} ^ {|p|} [a ^ {\gcd(k, \varphi(p_i ^ {\alpha_i}))} \equiv 1 \pmod {p_i ^ {\alpha_i}}]\\
&= \prod_{i = 1} ^ {|p|} \sum_{a \le p_i ^ {\alpha_i}} [a ^ {\gcd(k, p_i - 1)} \equiv 1 \pmod {p_i ^ {\alpha_i}}]\\
&= \prod_{i = 1} ^ {|p|} s(p_i ^ {\alpha_i}, \gcd(k, p_i - 1)) = \prod_{i = 1} ^ {|p|} \gcd(k, p_i - 1)\\
\end{aligned}
\]
Suppose \(k | \varphi(m) \land k \perp m: l(k) = \sum_{\mathbb L (x) | k} \text{cnt}_m(x)\),
suppose \(\varphi(m) \not\leftarrow m = \frac{\varphi(m)}{\gcd(m, \varphi(m))} = \prod_{i = 1} ^ {|q|} q_i ^ {\beta_i}\),
suppose \(\mathbb E_m(k) = \gcd(k ^ {\infty}, \varphi(m)) = \prod_{i \in [k]} q_i ^ {\beta_i}\):
\[\therefore l(k) = s(m, \mathbb E_m(k)) = \prod_{i = 1} ^ {p} \gcd(\mathbb E_m(k), p_i - 1) = \mathbb E_m(k) = \prod_{i \in [k]} q_i ^ {\beta_i}
\]
\[\begin{aligned}
\therefore \text{Density} &= \frac{1}{m}\sum_{x | \varphi(m) \land x\perp m} \frac{\text{cnt}_m(x)}{\mathbb{L}(x)}\\
&= \frac{1}{m}\sum_{[k]\subseteq [q]} \frac{1}{k} \sum_{[\mathbb L(x)] \subseteq [k]} (-1) ^ {|k| - [\mathbb L(x)]} l(k)\\
&= \frac{1}{m} \sum_{[k]\subseteq [q]} \prod_{i \in [k]} \frac{q_i ^ {\beta_i} - 1}{q_i}\\
&= \frac{1}{m} \prod_{i = 1} ^ {|q|} (1 + \frac{q_i ^ {\beta_i} - 1}{q_i})\\
\end{aligned}
\]
constexpr int mod = 998244353;
int power(int a, int x = mod - 2) {
int p = 1;
for (; x; x >>= 1) {
if (x & 1) p = p * (ll)a % mod;
a = a * (ll)a % mod;
}
return p;
}
int main() {
const int N = 1000000;
vector lp(N + 1, -1);
vector<int> primes;
for (int i = 2; i <= N; ++i) {
if (!~lp[i]) {
lp[i] = sz(primes);
primes.push_back(i);
}
for (int j = 0; j <= lp[i] and i * primes[j] <= N; ++j) lp[i * primes[j]] = j;
}
cin.tie(0)->sync_with_stdio(false);
int tt;
cin >> tt;
while (tt--) {
auto collect = [&](int x, set<int>& f) {
while (x > 1) {
int p = primes[lp[x]];
while (x % p == 0) x /= p;
f.insert(p);
}
};
int x, y, z;
cin >> x >> y >> z;
set<int> s, t; // t = m \ phi
collect(x, s);
collect(y, s);
collect(z, s);
ll phi = 1;
for (int p : s) {
int c = 0;
for (int t = x; t % p == 0; t /= p) ++c;
for (int t = y; t % p == 0; t /= p) ++c;
for (int t = z; t % p == 0; t /= p) ++c;
collect(p - 1, t);
phi *= p - 1;
folr(i, 1, c - 1) phi *= p;
}
int res = 1;
for (int p : t) if (!s.count(p)) {
int prod = 1;
while (phi % p == 0) {
phi /= p;
prod = prod * (ll)p % mod;
}
res = res * ((ll)prod + p - 1) % mod * power(p) % mod;
}
ll m = x * (ll)y * z;
res = res * (ll)power(m % mod) % mod;
cout << res << '\n';
}
}

浙公网安备 33010602011771号