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