[六省联考2017]相逢是问候

链接:https://www.luogu.org/problemnew/show/P3747

题解:

欧拉定理+线段树维护

求ccc……a[i] %p的值

看上去一脸不可做,这要乘多少次

然而这个世界上存在着一个神奇的定理——欧拉定理EXT

a≡ax%φ(m)+φ(m)(mod m)

既然我们要求ccx(mod p)

不妨设d=c于是我们要求的就变成了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吧

posted @ 2018-02-22 13:05  尹吴潇  阅读(239)  评论(0编辑  收藏  举报