2025.12.16 省选模拟

记录

芝麻糊第一场省选模拟。

\(100+100+0=200\ \ \text{rk}8\) 感觉打的好像有点牛。但是摆了没写 T3 有点不牛。

11dbb92b419a2bd8d700f83dfb272031

开场 \(10\text{min}\) 判断 T2 是我可能会的串串?看着就像 SAM。然后就胡了一个需要树分块的 \(O(n\sqrt{n}\log n)\) 的做法。好像能平衡到单根号,但是不重要。看完部分分发现比 \(n^2\) 多了 \(0\) 分。

上个厕所冷静一会发现可以多一步转化,把这个树分块要维护的信息用倍增跳来换掉。所以会了 \(O(n\log n)\) 做法。但是比较不牛的是不会写 SAM。所以艰苦卓绝的学了半天之前写的 SAM 模板。然后写了这个单 \(\log\) 做法。但是比较搞笑的是我调不出来。然后开始颓。

颓了一会想到可以再多推一步,然后用树上前缀和维护信息。而且极其好写,所以就轻松写完了疑似是 \(O(n)\) 的做法。

旁边大手子 hxq 找规律过了 T1。大神啊。

跑的飞快,直接开始爽颓。颓了一会发现自己就一题有分不行。遂看 T1。发现这个定理我咋疑似在未知时间见过,套上去后不久变成求 \(n\) 的所有约数的欧拉函数之和吗。这不是唐完了,推一下式子不久结束了。写一下过了。

还剩半小时,继续颓颓颓。比较搞笑的是神人芝麻糊 OJ 明明确认了提交但是没给我交上去。找后台老师帮我 resubmit 了一下。

题解

A 小S玩矩阵

原题:未知?

题意:给定一个正帧数 \(n\)。一个由 \(n\) 的所有因子构成的递增序列 \(\{x_m\}\)。构造一个 \(m\times m\) 的矩阵。使得 \(a_{i,j}=\gcd(x_i,x_j)\)。问你这个矩阵的行列式。

首先一个我知道的引理表明:

\(S = \{x_1, x_2, \dots, x_m\}\) 是一个因子闭合的集合(即 \(\forall x \in S\),若 \(d|x\),则 \(d \in S\)),且 \(x_1 < x_2 < \dots < x_m\)。定义矩阵 \(A\)\(A_{i,j} = \gcd(x_i, x_j)\),则 \(\det(A) = \prod_{i=1}^m \phi(x_i)\)

证明
利用欧拉函数的性质:\(n = \sum_{d|n} \phi(d)\)
我们可以将 \(\gcd(x_i, x_j)\) 写为:

\[\gcd(x_i, x_j) = \sum_{d | \gcd(x_i, x_j)} \phi(d) = \sum_{d|x_i \text{ 且 } d|x_j} \phi(d) \]

由于 \(S\) 是因子闭合的,所有 \(x_i\) 的因子都在 \(S\) 中。我们可以构造一个 \(m \times m\) 的矩阵 \(U\),其中:

\[U_{i,j} = \begin{cases} 1 & \text{若 } x_j | x_i \\ 0 & \text{否则} \end{cases} \]

构造对角矩阵 \(\Lambda\),其中 \(\Lambda_{i,i} = \phi(x_i)\)
考虑矩阵乘积 \((U \Lambda U^T)_{i,j}\)

\[(U \Lambda U^T)_{i,j} = \sum_{k=1}^m U_{i,k} \Lambda_{k,k} (U^T)_{k,j} = \sum_{k=1}^m U_{i,k} \phi(x_k) U_{j,k} \]

\[= \sum_{k=1}^m [x_k | x_i] \cdot \phi(x_k) \cdot [x_k | x_j] = \sum_{x_k | \gcd(x_i, x_j)} \phi(x_k) = \gcd(x_i, x_j) = A_{i,j} \]

因此,\(A = U \Lambda U^T\)
由行列式的乘法性质:\(\det(A) = \det(U) \det(\Lambda) \det(U^T) = (\det(U))^2 \det(\Lambda)\)
由于我们将 \(x_i\) 从小到大排序,\(x_j | x_i\) 意味着 \(x_j \le x_i\)。当 \(i=j\) 时,\(x_i | x_i\) 为真,故 \(U_{i,i}=1\);当 \(j > i\) 时,\(x_j > x_i\),不可能有 \(x_j | x_i\),故 \(U_{i,j}=0\)
所以 \(U\) 是一个对角线全为 1 的下三角矩阵,\(\det(U) = 1\)
故:

\[\det(A) = 1^2 \cdot \prod_{i=1}^m \phi(x_i) = \prod_{d|n} \phi(d) \]

现在问题转化为计算 \(n\) 的所有约数的欧拉函数之积。
\(n = \prod_{i=1}^t p_i^{k_i}\)
定义函数 \(F(n) = \prod_{d|n} \phi(d)\)
由于 \(\phi\) 是积性函数,若 \(n = A \cdot B\)\(\gcd(A, B) = 1\),则 \(n\) 的因子可以唯一表示为 \(d_A \cdot d_B\) 的形式,其中 \(d_A|A, d_B|B\)

\[F(n) = \prod_{d_A|A} \prod_{d_B|B} \phi(d_A d_B) = \prod_{d_A|A} \prod_{d_B|B} (\phi(d_A)\phi(d_B)) \]

\[= \left( \prod_{d_A|A} \phi(d_A)^{\tau(B)} \right) \cdot \left( \prod_{d_B|B} \phi(d_B)^{\tau(A)} \right) = F(A)^{\tau(B)} \cdot F(B)^{\tau(A)} \]

其中 \(\tau(n)\) 表示 \(n\) 的约数个数。

对于 \(n = \prod_{i=1}^t p_i^{k_i}\),我们可以推广上述结论:

\[F(n) = \prod_{i=1}^t F(p_i^{k_i})^{N_i} \]

其中 \(N_i\) 是除去 \(p_i^{k_i}\) 后剩余部分的约数个数,即 \(N_i = \prod_{j \neq i} (k_j + 1) = \frac{\tau(n)}{k_i + 1}\)

我们需要计算 \(F(p^k) = \prod_{j=0}^k \phi(p^j)\)

\[\begin{aligned} F(p^k) &= \phi(1) \cdot \phi(p) \cdot \phi(p^2) \cdots \phi(p^k) \\ &= 1 \cdot (p-1) \cdot p(p-1) \cdot p^2(p-1) \cdots p^{k-1}(p-1) \end{aligned} \]

\((p-1)\)\(p\) 的幂次分开统计:

  1. \((p-1)\) 出现了 \(k\) 次(从 \(p^1\)\(p^k\))。
  2. \(p\) 的指数和为 \(0 + 1 + 2 + \dots + (k-1) = \frac{k(k-1)}{2}\)

所以:

\[F(p^k) = (p-1)^k \cdot p^{\frac{k(k-1)}{2}} \]

\[\det(A) = \prod_{i=1}^t \left[ (p_i - 1)^{k_i} \cdot p_i^{\frac{k_i(k_i-1)}{2}} \right]^{N_i} \]

\[N_i = \prod_{j \neq i} (k_j + 1) \]

posted @ 2025-12-16 16:16  无名之雾  阅读(8)  评论(0)    收藏  举报