超-4运算在 Z/nZ 上的收敛性 – 欧拉函数与扩展欧拉定理

扩展欧拉定理揭示了对于任意模数 nn,有 abmodn={ab,b<φ(n)abmodφ(n)+φ(n),otherwise. a^b\bmod n=\begin{cases} a^b,&b<\varphi(n)\\ a^{b\bmod \varphi(n)+\varphi(n)},&\text{otherwise} \end{cases}.

我们又知道若分解质因数 x=picix=\sum p_i^{c_i},则 φ(x)=x(pi1)/pi\varphi(x)=x\prod (p_i-1)/p_i。则若 x>1x>1,若 2x2\mid xφ(x)x/2\varphi(x)\leq x/2;否则,2φ(x)2\mid\varphi(x)。记 φ(k)(x)=φ(φ(φ(k layersx)))\varphi^{(k)}(x)=\underbrace{\varphi(\varphi(\cdots\varphi(}_{k\text{ layers}}x)\cdots)),则 O(logn)\newcommand\bigO{\operatorname{O}}\bigO(\log n) 级别的 kk 就能使其收敛到 11

因此对于 Z/nZ\mathbb{Z}/n\mathbb{Z} 上的超-4运算 a1a2a3a_1^{a_2^{a_3^{⋰}}},结合扩展欧拉定理得到,在指数塔的 O(logn)\bigO(\log n) 层就将得到 modφ(1)+φ(1)1\bmod\varphi(1)+\varphi(1)\equiv 1 的指数。从而它是收敛的。

洛谷题库 P3747 [六省联考 2017] 相逢是问候

一道可以此解决的构造题 – MOCK PTS 20231127 A

给出 TT 组询问,T1000T\leq 1000。每次给定正整数 a,m109a,m\leq 10^9,求出一个 int64_t 范围内的正整数 xx,满足 axx(modm)a^x\equiv x\pmod m

kk 是极小的满足 kak1a(modm){^k{a}}\equiv{^{k-1}{a}}\pmod m 的整数。如果 k1a{^{k-1}{a}}Z\mathbb Z 上不超过范围限制,我们直接输出即可。

否则,若 x=kax={^k{a}},由扩展欧拉定理及题目原式,它须满足 k+1aka(modm)kak1a(modφ(m)) \begin{aligned} {^{k+1}{a}}&\equiv{^{k}{a}}\pmod{m}\\ {^k{a}}&\equiv{^{k-1}a}\pmod{\varphi(m)} \end{aligned} (由于 k1a{^{k-1}a}Z\mathbb Z 上远超 φ(m)\varphi(m),故只需保证 modφ(m){}\bmod{\varphi(m)} 意义下相同即可。)

因此我们求出 modm,modφ(m){}\bmod m, {}\bmod{\varphi(m)} 意义下的 ka{^{k}a},使用扩展中国剩余定理合并两方程(根据结果反推得 exCRT 必然成立)就得到 modlcm(m,φ(m)){}\bmod\operatorname{lcm}(m,\varphi(m)) 意义下的 xx,它符合范围要求。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
#include <bits/stdc++.h> using namespace std; #define inl inline typedef long long ll; typedef unsigned long long ull; // typedef __int128 lll; // typedef long double llf; typedef pair <int, int> pint; #define fst first #define scd second #define all(p) begin (p), end (p) #define empb emplace_back int T, a, m; unordered_map <int, int> rec; inl int phi (int m) { int &x = rec[m]; if (x) return x; else x = 1; for (int p = 2; p * p <= m; ++p) { if (m % p) continue; while (m % p == 0) m /= p, x *= p; x /= p, x *= p - 1; } if (m > 1) x *= m - 1; return x; } inl ll fpow (ll a, ll b, const int mod) { ll c = 1; a %= mod; for (; b; b >>= 1) { if (b & 1) (c *= a) %= mod; (a *= a) %= mod; } return c; } int tetra (int a, int b, int m) { static int _x; if (!b) return _x = 1, 1 % m; const int p = phi (m); int x = tetra (a, b - 1, p); if (_x == -1 || _x >= p) x = fpow (a, x + p, m); else x = fpow (a, x, m); return _x == -1 || pow (a, _x) > INT_MAX ? -1 : fpow (a, _x, INT_MAX), x; } inl ll exgcd (ll a, ll b, ll &x, ll &y) { if (!b) return x = 1, y = 0, a; ll d = exgcd (b, a % b, y, x); return y -= a / b * x, d; } inl int f (int a, int m) { int l = 1, r = 60, mid; while (l < r) { mid = l + r >> 1; if (tetra (a, mid, m) == tetra (a, mid - 1, m)) r = mid; else l = mid + 1; } return l; } int main () { /* */ scanf ("%d", &T); while (T--) { scanf ("%d%d", &a, &m); int t = f (a, m), x1 = tetra (a, t, m), x2 = tetra (a, t, phi (m)); ll u, v, d = exgcd (m, phi (m), u, v); const ll p = (ll) m * phi (m) / d, q = (x2 - x1) / d; ll y = ((__int128_t) u * q * m + x1) % p + p; printf ("%lld\n", y); } return 0; }
另一种解法

我们试图求 kaxx(modm)ka^x\equiv x\pmod m 的一个解。

x=pφ(m)+rx=p\varphi(m)+r,则 ka[p1]φ(m)arpφ(m)+r(modm)pφ(m)+qm=ka[p1]φ(m)arr \begin{aligned} ka^{[p\geq 1]\varphi(m)}a^r&\equiv p\varphi(m)+r\pmod m\\ \Longrightarrow p\varphi(m)+qm&=ka^{[p\geq 1]\varphi(m)}a^r-r \end{aligned}

上式有解的充分必要条件是 gcd(m,φ(m))ka[p1]φ(m)arr\gcd(m,\varphi(m))\mid ka^{[p\geq 1]\varphi(m)}a^r-r,也即 ka[p1]φ(m)arr(modgcd(m,φ(m)))ka^{[p\geq 1]\varphi(m)}a^r\equiv r\pmod{\gcd(m,\varphi(m))}。不难发现,我们总可以调整系数 p,qp,q 使 p1p\geq 1;于是令 k=kaφ(m),x=r,m=gcd(m,φ(m))k’=ka^{\varphi(m)},x’=r,m’=\gcd(m,\varphi(m)),递归解决子问题。边界是 m=1m=1x=0x=0

  • 2023年11月30日