Description
定义a^b为a的b次方,并且^是满足右结合的,即a^b^c^d=a^(b^(c^d))。例如,2^3^2=2^(3^2)=2^9=512。
现在给定n个数a1,a2,…,an 求a1^a2^…^an对p取模的值。
Solution
主要目标
解决axmodp
解决方法
我们往欧拉定理上面想,首先保证a与p互质,那么axmodp=axmodφ(p)modp,因为aφ(p)≡1(modp),所以aφ(p)∗aφ(p)∗……∗aφ(p)≡1(modp),那么x=k∗φ(p)+xmodφ(p),所以axmodp=axmodφ(p)modp。
我们要让他们互质
那么我们就要先除以他们的最小公倍数
设d=gcd(a,p),b=a/d,c=p/d,ans=axmodp
所以b与c互质
把b和c带入ans
dx∗bx≡ans(modc∗d)
同时除以d
dx−1∗bx≡ansd(modc)
现在b就与c互质了,那么我们带入上面的证明
dx−1∗bxmodφ(p)≡ansd(modc)
注意
当x=1的时候,d−1就是求d关于c的逆元
每一层的mod是不一样的,用一个递归去实现。
Code