加载中...

Hello 2026 E(不等式放缩,数论+dp)

E. LCM is Legendary Counting Master

回顾题目:给定长度为 \(n\)\(a_{i} \in [0, m]\) 的序列。现在要求填充序列中所有 \(a_{i}=0\) 的项,填充值的范围是 \([1, m]\),使得序列 \(a\) 满足:

  • 严格单调递增
  • \(\frac{1}{lcm(a_{1},a_{2})} + \frac{1}{lcm(a_{2},a_{3})} + ... + \frac{1}{lcm(a_{n-1},a_{n})} + \frac{1}{lcm(a_{n},a_{1})} \geq 1\)

统计满足要求的序列个数,\(n,m \leq 3000\)

显然需要对上面的不等式变形。我们都知道:

\[lcm(x, y) = \frac{x*y}{gcd(x, y)} \]

利用上式代换:

\[\frac{1}{lcm(a_{1},a_{2})} + \frac{1}{lcm(a_{2},a_{3})} + ... + \frac{1}{lcm(a_{n-1},a_{n})} + \frac{1}{lcm(a_{n},a_{1})} \]

\[= \frac{gcd(a_{1}, a_{2})}{a_{1}a_{2}} + \frac{gcd(a_{2}, a_{3})}{a_{2}a_{3}} + ... + \frac{gcd(a_{n-1}, a_{n})}{a_{n-1}a_{n}} + \frac{gcd(a_{n}, a_{1})}{a_{n}a_{1}} \]

由辗转相除法,不难得到 \(x<y\) 时下式成立:

\[gcd(x, y) \leq y - x \]

因此对上式进行不等式放缩

\[\leq \frac{a_{2} - a_{1}}{a_{1}a_{2}} + \frac{a_{3} - a_{2}}{a_{2}a_{3}} + ... + \frac{a_{n} - a_{n-1}}{a_{n-1}a_{n}} + \frac{a_{n} - a_{1}}{a_{n}a_{1}} \]

\[= 2 (\frac{1}{a_{1}} - \frac{1}{a_{n}}) \]

如果只是这样死板地变换,最终会得到原式 \(\leq 2 (\frac{1}{a_{1}} - \frac{1}{a_{n}})\),无法得到什么有用的结论。试想一下:如果 \(2 (\frac{1}{a_{1}} - \frac{1}{a_{n}})\) 这一项变为 \(1\),那么我们能得到什么结论?

很显然,由不等式放缩的数学证明得到的原式 \(\leq 1\) 与 题目要求的原式 \(\geq 1\) 结合起来,便要求了原式的值只能等于 \(1\)。并且当不等式取等时,所有的放缩条件也必须取等。这样的序列性质显然是更强的,便于我们去对序列计数。

尝试对不等式左侧的最后一项,也就是 \(\frac{gcd(a_{n}, a_{1})}{a_{n}a_{1}}\) 这一项作变换。这里变换成 \(\frac{a_{1}}{a_{n}a_{1}}\)(显然 \(gcd(a_{1},a_{n}) \leq a_{1}\) 也成立):

原不等式放缩改为:

\[\leq \frac{a_{2} - a_{1}}{a_{1}a_{2}} + \frac{a_{3} - a_{2}}{a_{2}a_{3}} + ... + \frac{a_{n} - a_{n-1}}{a_{n-1}a_{n}} + \frac{a_{1}}{a_{n}a_{1}} \]

\[= (\frac{1}{a_{1}} - \frac{1}{a_{2}}) + (\frac{1}{a_{2}} - \frac{1}{a_{3}}) + ... + (\frac{1}{a_{n-1}} - \frac{1}{a_{n}}) + \frac{1}{a_{n}} \]

\[= \frac{1}{a_{1}} \]

由于 \(a_{1} \geq 1\),因此 \(\frac{1}{a_{1}} \leq 1\),即若上述不等式 \(\leq 1\) 成立。根据上面的分析可知,原式的值只能等于 \(1\),且原序列必须满足:

  • \(a_{1} < a_{2} < ... < a_{n}\)(题目要求)
  • \(a_{1} = 1\) (不等式只能取等)
  • \(\forall i \in [1,n),gcd(a_{i}, a_{i+1}) = a_{i+1} - a_{i}\)每个不等式放缩都要取等

不难证明上面的三个条件与原题目约束条件是充要的,因此问题转化成了满足上述三个条件的序列个数。

\(x < y\)\(gcd(x, y) = y - x\),则显然 \(y - x\)\(x\) 的约数,也就是:\(d | x, y = x + d\)。因此转移时,只需要枚举 \(x\) 的约数。总复杂度 \(O(nm \ln m)\),具体实现见代码。

code

posted @ 2026-01-14 17:07  jxs123  阅读(0)  评论(0)    收藏  举报