[六省联考2017]相逢是问候——欧拉公式+线段树 bzoj4869: [Shoi2017]相逢是问候(欧拉函数+线段树)

Description

信息将你我连结。B君希望以维护一个长度为n的数组,这个数组的下标为从1到n的正整数。一共有m个操作,可以
分为两种:0 l r表示将第l个到第r个数(al,al+1,...,ar)中的每一个数ai替换为c^ai,即c的ai次方,其中c是
输入的一个常数,也就是执行赋值ai=c^ai1 l r求第l个到第r个数的和,也就是输出:sigma(ai),l<=i<=rai因为
这个结果可能会很大,所以你只需要输出结果mod p的值即可。

Input

第一行有三个整数n,m,p,c,所有整数含义见问题描述。
接下来一行n个整数,表示a数组的初始值。
接下来m行,每行三个整数,其中第一个整数表示了操作的类型。
如果是0的话,表示这是一个修改操作,操作的参数为l,r。
如果是1的话,表示这是一个询问操作,操作的参数为l,r。
1 ≤ n ≤ 50000, 1 ≤ m ≤ 50000, 1 ≤ p ≤ 100000000, 0 < c <p, 0 ≤ ai < p

Output

对于每个询问操作,输出一行,包括一个整数表示答案mod p的值。

Solution:

也是比较恶心的题目了。

综合了数论(欧拉公式,phi的求法,快速幂)+数据结构(线段树)+预处理(phi的迭代,快速幂指数根号拆分

一道值得好好做的好题。

首先我们要知道扩展欧拉公式:

(温馨提示:

类似地有一道题:

上帝与集合的正确用法

这个题目是本题的简化简化简化简化。。。版。

先用扩展欧拉定理过了这道题才行。(虽然我用的CRT)

这个题目一看不可做

但是发现,根据扩展欧拉公式,即使有:

c^c^c^c^..^a

不断p取phi,大概logn次会变成1

证明:如果p是偶数,必然会至少有p/2个数不互质,会除以2

如果p是奇数,因为gcd(n,x)=gcd(n,n-x)=1,所以,与p互质的数成对出现,phi都是偶数(除了1,2)。p=phi(p)就变成了偶数。

每两次至少除以2

所以,一个位置最多被操作logp(设为up)次,值就不会再变了。因为若p=1时,根据欧拉公式第三条,指数一定都会是1。

所以,我们可以预处理每个位置操作up次后的值。

然后,区间修改,区间求和?线段树!

暴力区间修改,如果区间修改次数==up,则不再修改。

复杂度,大概:O(nlog^2n+mlogn)

细节问题:推荐:bzoj4869: [Shoi2017]相逢是问候(欧拉函数+线段树)

1.up要到Phi(1)=1,也就是说,如果p=4,要mod 4 、2、1 、1

2.

猜你喜欢

转载自www.cnblogs.com/Miracevin/p/9753649.html