这个。。。。。。
这个算法好强啊。
给定P,给出T个q,对这T个询问求出Pq(modM)P^q \pmod MPq(modM) , T<=5∗107,q<=1010T<=5*10^7,q<=10^{10}T<=5∗107,q<=1010
首先你得要一个freadfreadfread的读入优化。
然后发现快速幂会T。
别急,这里有个自诩光速幂的算法:
取S=qmax=105S = \sqrt {q_{max}} = 10^5S=qmax=105
然后预处理Pk,k∈[1,S]P^k,k \in [1,S]Pk,k∈[1,S]
和Pk,k=iS,i∈NP^k,k = iS , i \in NPk,k=iS,i∈N
然后对于q=kS+lq = kS + lq=kS+l
就可以直接分成两个数相乘了。O(1)O(1)O(1)
然后你会发现PqP^qPq是有循环节的,然后,没有了。
Luogu P5110 块速递推