加载中...

3.31 —— ..D

..D

限时每日一题day24。一道纯数学题,结论非常简单,但还是想再复盘一下推导的过程。

先说结论:

  1. \(kind1\) 成立:\(b^{k} \equiv 0 (mod\space n)\)
  2. \(kind2\) 成立:\(b^{k} \equiv 1 (mod\space n)\)
  3. \(kind3\) 成立:\(b^{k} \equiv n - 1 (mod\space n)\)

对于三种情况,分别找到使对应同余式成立的最小的 \(k\),再取三者 \(min\) 即为答案。三种情况都找不到合法的 \(k\) 则无解。

下面证明一下上述三条结论:

  1. 可以取最后 \(k\) 位模 \(n\) 来表示整个数模 \(n\) 的结果,也就说明去除最后 \(k\) 位(这里指将后 \(k\) 位均变为 \(0\)),形成的数一定是 \(n\) 的倍数。也就是:

\[d_{m} \times b^{m} + ... + d_{k + 1} \times b^{k + 1} + d_{k} \times b^{k} \equiv 0 (mod \space n) \]

上述 \(d_{i}\) 是任意取值的。因此要想等式恒成立,则一定有:

\[b^{k} \equiv 0 (mod\space n) \]

  1. 这里以 \(k = 3\) 为例:设该数为 \(b\) 进制表示,共 \(7\) 位。
    则将该数用进制拆分可表示为:

\[d_{6}b^{6} + d_{5}b^{5} + d_{4}b^{4} + d_{3}b^{3} + d_{2}b^{2} + d_{1}b^{1} + d_{0}b^{0} \]

而用该数从低到高每三位的和所表示的数为:

\[d_{0}b^{0} + (d_{2}b^{2} + d_{1}b^{1} + d_{0}b^{0}) + (d_{2}b^{2} + d_{1}b^{1} + d_{0}b^{0}) \]

两式 \(mod \space n\) 相等,若恒成立,则必有:

\[b^{k} \equiv 1 (mod\space n) \]

  1. 与2极为类似。只不过第二个式子变为:

\[d_{0}b^{0} - (d_{2}b^{2} + d_{1}b^{1} + d_{0}b^{0}) + (d_{2}b^{2} + d_{1}b^{1} + d_{0}b^{0}) \]

整理一下即为:

\[b^{k} \equiv n - 1 (mod\space n) \]

证毕。

得到结论后,由于需要从小到大枚举可行解,则还需要考虑一下如何快速判断无解的情况(否则一直得不到可行解,导致死循环)。这里可以利用循环节的技巧:

余数范围在 \([0,n-1]\) 之间,则在 \(k\) 从小变大的过程中,余数为 \(0\)\(1\)\(n - 1\) 中的某一个时,有解;否则,在没有遇到这三个数时,遇到了一个之前得到过的余数,则可以立即判定无解,因为接下来的所有余数将会构成循环节,且永远不会出现 \(0\)\(1\)\(n - 1\)。因此开一个 \(vis\) 数组记录得到过的余数即可,复杂度 \(O(n)\)

code

posted @ 2025-03-31 20:20  jxs123  阅读(23)  评论(0)    收藏  举报