指数循环节题集
有个公式
x >= Phi(C), A^x = A ^ (x%Phi(C) + Phi(C)) (mod C)
不会证
1.hdu 3221 Brute-force Algorithm
题目链接
题意:
Function Find(int n,function func)
If n=1
For i=1 to a do func()
Elseif n=2
For i=1 to b do func()
Else Find(n-1,Find(n-2,func))
Function Main
Find(n,funny)
给出n,a,b,p,问funny会执行多少次,结果模p。
限制:1 <= n <= 1e9,1 <= p <= 1e6,0 <= a,b < 1e6
思路:找规律,指数循环节
令f(n)为funny执行多少次
会发现 f(n)=f(n-1)*f(n-2)
然后:
f(1)=(a^1)*(b^0)
f(2)=(a^0)*(b^1)
然后:
会发现a和b的指数成斐波那契数一样增长,可以用矩阵快速幂解决指数问题
但指数太大,所以要用到指数循环节
公式x >= Phi(C), A^x = A ^ (x%Phi(C) + Phi(C)) (mod C)
2.hdu 5152 A Strange Problem
题目链接
题意:给你一个长度为N的序列,序列为A1,A2,A3,…AN,然后有M个操作,每个操作为以下三种操作的其中一个:
1. 输出操作。给你l,r,输出∑i=(l,r) Ai的值。
2. 修改操作。给你x,把Ax修改为2Ax
3. 加法操作。给你l,r,x,给Ai(l≤i≤r)加上x
由于输出操作的结果可能很大,输出结果对2333333取模。
限制:0 <= n,m <= 50000
0 <= ai <= 1e9
思路:首先是,这道题主要考操作2,公式x >= Phi(C), A^x = A ^ (x%Phi(C) + Phi(C)) (mod C)
然后,值得注意是,这道题的Phi(c),是一层套一层的。
最后,题目给出2333333,所以Phi(c),最多只有18层。
题解链接