给一个链接:http://acm.upc.edu.cn/problem.php?id=2219
就是给一个公式,求冪取余。
拿到则这个题的时候,感觉挺简单的,n的范围是10^6,而qmod的复杂度为log2 N=30左右,所以,应该不会TLE吧,可惜还是TLE了。
反正我是想不到这种方法了。因为我以为, 时间复杂度已经到达极限了,想不到qmod的复杂度还可以通过打表降为O(1)。
实际上就相当于一个Dp问题了。
对此题:
设:A^N=A^(k*x+y)。即:N=k*x+y,x=N/k,y=N%k。由于N为10^9,所以,k取33333左右就可以了,这样x和y的取值都不超过33333了。
则快速幂变成了:A^N mod P=A^(k*x+y) mod P=(A^(k*x) * A^y )mod P=(A^(k*x) mod P * (A^y) mod P) mod P。由于A,k,P都是定值,则A^N mod P 的值只取决于x和y。分别用dpx和dpy来记录A^(k*x) mod P和A^y mod P,则又可得到:
A^N