题目
这题怎么出的这么好啊。
发现这个操作很不常规,那么就一定会有一些很不常规的性质。
c
i
≡
c
i
m
o
d
  
φ
(
p
)
(
m
o
d
p
)
c^i \equiv c^{i\mod \varphi(p)} \pmod p
ci≡cimodφ(p)(modp)
c
c
i
≡
c
(
c
i
m
o
d
  
φ
(
p
)
)
≡
c
i
m
o
d
  
φ
(
φ
(
p
)
)
m
o
d
  
φ
(
p
)
(
m
o
d
p
)
c^{c^i} \equiv c^{(c^i\mod \varphi(p))\equiv c^{i\mod \varphi(\varphi(p))}\mod \varphi(p)} \pmod p
cci≡c(cimodφ(p))≡cimodφ(φ(p))modφ(p)(modp)
你们应该知道我要表达什么意思的。
所以我们需要维护各层
c
.
.
.
m
o
d
  
φ
k
(
p
)
c^{...}\mod \varphi^k(p)
c...modφk(p)
可以发现
φ
O
(
log
p
)
(
p
)
=
1
\varphi^{O(\log p)}(p) = 1
φO(logp)(p)=1
然后再怎么加
c
.
.
.
c^{...}
c...值都不会改变了。
然后就是一个暴力修改线段树+维护区间是否已全被修改。
每个点被修改
O
(
log
n
)
O(\log n)
O(logn)次,每次消耗
O
(
log
n
)
O(\log n)
O(logn)次的时间来爬。
每次修改是
O
(
log
2
n
)
O(\log^2n)
O(log2n)的快速幂套
φ
\varphi
φ递归。
然后我们把快速幂用光速幂替代即可。
但是发现每次修改的时候因为模数不一定互质,
需要扩展欧拉定理:
a
b
≡
a
b
,
w
h
e
r
e
b
<
φ
(
m
)
o
r
a
b
m
o
d
  
φ
(
m
)
+
φ
(
m
)
,
w
h
e
r
e
b
>
=
φ
(
m
)
a^b\equiv a^b,where\ b<\varphi(m) \ or \ a^{b\mod \varphi(m)+\varphi(m)},where\ b>= \varphi(m)
ab≡ab,where b<φ(m) or abmodφ(m)+φ(m),where b>=φ(m)
写起来应该比较恶心吧。
退役前综合征:不想写代码