GPT秒了.
User
1 2 3 4 5 6 7 8 9 10 11 12 13
| 数的超幂
数a的正整数b次超幂或迭代幂次,记作a↑↑b或ba,按照如下方式递归定义:
a↑↑1 = a, a↑↑(k+1) = a^(a↑↑k).
举例来说,3↑↑2 = 3^3 = 27,因此3↑↑3 = 3^{27} = 7625597484987,而3↑↑4约为10^{3.6383346400240996*10^{12}}。
求1777↑↑1855的最后8位数字。 我的思路: 不停的使用欧拉定理,对mod取很多次mod,直到phi变成1为止,使用快速幂递归处理即可. 模数很小,可以暴力求欧拉函数.
|
GPT
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 29 30 31
| 好 —— 我算过了,结论是:
**1777↑↑1855 的最后 8 位是 `95962097`。**
下面把用到的算法思路与关键细节简要说明(中文):
1. 记要算的数为 (A_1=1777),高度为 (H=1855),即 [ A_H = \underbrace{1777^{1777^{\cdot^{\cdot^{1777}}}}}_{\text{高度 }1855}. ] 我们要算 (A_H \bmod 10^8)。
2. 令 (m_0=10^8),对模 (m) 使用 Euler 函数 (\varphi(m)) 构造模链 (m_0,m_1=\varphi(m_0),m_2=\varphi(m_1),\dots) 直到到达 (1)。 对 (10^8) 这条链为: (100000000,40000000,16000000,\dots,2,1)(长度远小于 1855)。
3. 递归地从上往下计算(高度减小时把模换成 (\varphi(\cdot))):
* 若当前模 (m=1),则任何数模 (1) 为 (0); * 若高度为 1,直接取 (1777 \bmod m); * 否则先递归得到指数 (E) 关于模 (\varphi(m)) 的“模值”和一个标记 `is_large`(表示真实的指数是否至少 (\varphi(m)))。
* 若真实指数 (\ge \varphi(m)),按欧拉定理需把指数缩减为 (E_{\bmod\varphi(m)}+\varphi(m))(即在模 (\varphi(m)) 的余数上加上 (\varphi(m)))再作为幂的指数; * 否则直接用真实的指数(即 (\ <\varphi(m)) 的小整数)计算幂的模。 这个标记 `is_large` 能通过递归向下的比较(或者用对数判断 (a^E) 是否已超过当前模)来可靠得到。
4. 由于底数 (1777) 与 (10^8) 互质,上述通过 (\varphi) 链进行的“模化并在必要时加上 (\varphi)”的做法是正确且充足的。
我用上述方法(同时在递归中用对数判断小指数是否足以使 (a^E\ge m))实现并计算,得到最终结果 `95962097`(恰好 8 位)。
如果你想,我可以把用于验证与计算的 Python 实现贴出来,或者一步步展示模链与部分中间值供你检查。要看代码吗?
|
fun fact
GPT内置agent有py,但是ds没有,导致ds往往预测输出的时候全在瞎说,gpt会好一点.