近期没有写过博客感觉要死了->重返jz深造
一道区间查询的问题,因为模数不是质数,我们考虑利用指数循环节这个东西:
x^k=x^(k%phi(M)+phi(M))%M 这里要求k>=phi(M)
那么可以写成Ans[l,r]%M=x^(Ans[l+1,r]%phi(M))%M
由于phi的迭代会在logn次收敛为1,所以我们可以直接递归来做
先用线性筛筛出10^7以内的phi值,大过这个的就分解质因数来计算
注意一个问题,对于一个询问[l,r],有可能answer[l+1,r]并不能达到phi(M),这个时候就不能使用上面的结论
至于如何判断一个区间的答案是否大过模数,可以做一次不带取模的pow和一次带取模的,如果两次答案不同就说明答案大过模数
#pragma GCC optimize("O3")
#pragma G