[六省联考2017]相逢是问候
链接:https://www.luogu.org/problemnew/show/P3747
题解:
欧拉定理+线段树维护
求ccc……a[i] %p的值
看上去一脸不可做,这要乘多少次
然而这个世界上存在着一个神奇的定理——欧拉定理EXT
ax ≡ax%φ(m)+φ(m)(mod m)
既然我们要求ccx(mod p)
不妨设d=cx 于是我们要求的就变成了cd
据欧拉定理有cd=cd%φ(p)+φ(p)(mod p)
即ccx=ccx%φ(p)+φ(p)(mod p)
看不清?放大一下
ccx=ccx%φ(p)+φ(p)(mod p)
标记的部分是不是很眼熟?
这部分又满足了欧拉定理
于是再抽一次φ变成
ccx%φ(φ(p))+φ(φ(p))%φ(p)+φ(p)(mod p)
这样一直抽下去,最后要%的东西会变成φ(φ(φ(φ(……p)))) (特别多个φ)
特别玄学的是这东西被φ多了就会变成1(据说最多log(p)次?)
然后就会出现x%1+1 = 0+1 = 1的状况
然后再对它修改就没什么用了,可以无视了
于是一发线段树维护每个点被修改了多少次
以及涉及欧拉的部分都不要乱%p,包括快速幂
另外计算c^x可以快速计算出来
我们可以预处理出c^1-----c^10000
以及c^10000-----c^20000----...-----c^100000000
类似bsgs吧