K - Happy Equation
基本信息
题目出处 | 2019 山东省大学生程序设计竞赛 |
队伍通过率 | 21/307 (6.8%) |
题解
通过打表可以发现,当 \(a\) 为奇数时,答案为 \(1\)。
证明
当 \(a\) 为奇数时,可以证明 \(x = a \bmod 2^p\) 是一个解。
首先,当 \(a < 2^p\) 时,\(x = a \bmod 2^p = a\) 显然满足 \(a^x = x^a \pmod {2^p}\)
当 \(a \ge 2^p\) 时,根据模的乘法有 \(a^x = x^x \pmod {2^p}\),根据 欧拉定理 有
则
\(\blacksquare\)
当 \(a\) 为奇数时,若 \(x\) 为偶数,则 \(a^x\) 是奇数,\(x^a\) 是偶数,不可能对 \(2^p\) 取模后相等。因此 \(x\) 也是奇数。
首先通过反证法证明以下引理。
引理 1:不存在两个奇数 \(x\) 和 \(y\) 满足 \(x, y \in [1, 2^p]\) 且 \(x^a = y^a \pmod {2^p}\)。
假设存在两个满足要求的奇数 \(x\) 和 \(y\),进行因式分解得
\(\sum\) 里的每一项都是奇数,共有 \(a\) 项,奇数个奇数项加起来仍然是奇数,不存在质因子 \(2\)。而 \(x - y \le 2^p - 1 < 2^p\),因此质因子 \(2\) 少于 \(p\) 个。即
与假设矛盾。
\(\blacksquare\)
令 \(v_2(t)\) 表示 \(t\) 的质因数分解中 \(2\) 的数量。接下来通过反证法证明以下引理。
引理 2:设 \(x = y \pmod {2^p}\) 且 \(v_2(x) < p\) 且 \(v_2(y) < p\),则 \(v_2(x) = v_2(y)\)。
不失一般性地,假设 \(v_2(x) < v_2(y)\),由题设有
等式两边同时除以 \(2^{v_2(x)}\) 得
\(\frac{x}{2^{v_2(x)}}\) 是奇数,由于 \(v_2(x) < p\) 则 \(k_x \times 2^{p - v_2(x)}\) 是偶数,因此等式左边是奇数;由于 \(v_2(x) < v_2(y)\) 则 \(\frac{y}{2^{v_2(y)}}\) 是偶数,由于 \(v_2(x) < p\) 则 \(k_y \times 2^{p - v_2(x)}\) 是偶数,因此等式右边是偶数。产生矛盾。
\(\blacksquare\)
接下来通过反证法证明:不存在两个奇数 \(x\) 和 \(y\) 满足 \(1 \le x < y \le 2^p\) 且 \(a^x = x^a \pmod {2^p}\) 且 \(a^y = y^a \pmod {2^p}\)。
假设存在两个满足要求的奇数 \(x\) 和 \(y\),相减得
令 \(v_2(t)\) 表示 \(t\) 的质因数分解中 \(2\) 的数量。由引理 1 得 \(v_2(y^a - x^a) < p\),则 \(v_2(a^y - a^x) < p\)(否则 \(a^y - a^x = 0 \ne y^a - x^a \pmod {2^p}\)),由引理 2 得 \(v_2(a^y - a^x) = v_2(y^a - x^a)\)
根据 升幂(LTE)定理 有
即
因为 \(a^x\) 是奇数,所以 \(v_2(a^x) = 0\)。因为 \(a\) 是奇数,当 \(a \ge 3\) 时,\((a - 1)\) 和 \((a + 1)\) 均为正偶数,因此 \(v_2(a - 1) \ge 1\),\(v_2(a + 1) \ge 1\)。因此
产生矛盾。
当 \(a = 1\) 时,满足 \(1^x = x^1 \pmod {2^p}\) 且 \(x \in [1, 2^p]\) 的 \(x\) 显然只有 \(x = 1\)。
\(\blacksquare\)
当 \(a\) 为偶数时,设 \(a\) 的质因数分解中有 \(q\) 个 \(2\),那么 \(a^x\) 的质因数分解中就有 \(qx\) 个 \(2\)。当 \(qx \ge p\) 时,\(a^x \bmod 2^p = 0\)。因为 \(a\) 是正偶数,即 \(q \ge 1\),所以当 \(x \ge p\) 时我们只要考虑满足 \(x^a \bmod 2^p = 0\) 的 \(x\)。
同样,设 \(x\) 的质因数分解中有 \(k\) 个 \(2\),那么 \(x^a\) 的质因数分解中就有 \(ka\) 个 \(2\)。为了让 \(x^a \bmod 2^p = 0\),必须要有 \(ka \ge p\),即 \(k \ge \lceil\frac{p}{a}\rceil = k'\)。\([p, 2^p]\) 中,\(2^{k'}\) 的倍数有 \((2^{p - k'} - \lfloor\frac{p - 1}{2^{k'}}\rfloor)\) 个。
由于 \(p \le 30\),\(x < p\) 的部分枚举即可。复杂度 \(\mathcal{O}(p \log (a + p))\)。
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|