令
$$\varphi(n)=p_1^{c_1-1}\ldots p_m^{c_m-1}(p_1-1)\ldots(p_m-1),$$
为Euler Totient函数,其中
$$n=p_1^{c_1}\ldots p_m^{c_m},$$
是n的质因数分解。显然只要$\gcd(a,n)=1$,那么a就是模n乘法群的元素,从而有
$$a^{\varphi(n)}=1 \pmod n.$$
记$a_j=a\uparrow\uparrow j$,$b_k=\phi(\phi(\ldots(\phi(n))\ldots))$,其中$\phi$出现k次.
在本题中$a=1777$, $b_0=n=10^8=2^8\cdot 5^8$,容易看出
$$b_k=\begin{cases}2^{8+k}\cdot 5^{8-k} & k\le 8, \\ 2^{24-k} & k\le24, \end{cases}$$
因此$\gcd(a,b_k)=1$总是成立,因此有
$$a_{1855} \bmod b_0=a^{a_{1854}\bmod b_1} \mod b_0=\ldots,$$
递归求解即得结果$95962097$。
注:本题需要具备本科程度的《抽象代数》知识。
def tower(a,k,x,y):
if x==y==0:
return 0
elif k==0:
return 1
elif y>0:
return pow(a,tower(a,k-1,x+1,y-1),(1 << x)*(5**y))
else:
return pow(a,tower(a,k-1,x-1,0),(1 << x)*(5**y))
print tower(1777,1855,8,8)
|