欧拉定理和循环节
我们再将
A_{i - 1} 化简,可以得到A_{i} = c * a - k * n , 可以知道a\mid A_i 所以(a,n) \mid A_i ,我们用d = (a,n) 来表示可以发现,随着
i 的增大,就是一个不断遍历d 的过程,所以我们就相当于是看n 中总共有几个d ,所以\color{red}\text{具体循环节 = } \frac{n}{(a,n)}
例题:
首先考虑,随着
x 的增大,也就是相当于每一次都加了一个a 同之前的想法设
d = (a,n) ,也就是随着x 的增大,LHS 不断在遍历d 的倍数,如果d \nmid b 说明不会有解,所以直接输出0 之后考虑有解的情况,也就是
d \mid b ,因为b 的取值是唯一的,所以在每一段的循环中只会出现一次,所以原题相当于在x\in[1,n] 中总共有几个循环节,所以ans = \frac{n}{\frac{n}{(a,n)}} = (a,n)
综上:
所以当
n 为p 的时候,ans = n - 1
如果 n 不是质数呢 ?
先来看看扩展欧拉定理:
我们可以考虑将 n 表示成
n = \prod p_i^{q_i} 的形式,根据算数基本定理,这种表示方式是唯一的个人认为扩展欧拉定理可能是先发现循环节的长度的。
s 为循环节的长度
考虑
a^i \mod m 最多只有 m 种结果,根据鸽巢原理,可以知道必定会出现循环节a^0, a^1 ... a^r, a^{r + 1} .. a ^{r + s - 1}, a^r \mod m 所以可以发现
a^0 ... a^{r - 1} 是没有重复的可以发现
m \mid a^r(a^s - 1) 不妨假设m = m_0 * a^r, (a, m_0) = 1 所以
m_0 \mid (a^s - 1), a^s \equiv 1 \pmod {m_0} \because (a, m_0) = 1 \therefore a^{\varphi(m_0)} \equiv 1 \pmod {m_0} \Rightarrow s \mid \varphi(m_0), \varphi(m_0)\mid \varphi(m) 所以之前的结论可以表示为
a^0, a^1 ... a^r....a^{r + \varphi(m) - 1}, a^r 循环节的长度为
\varphi(m) 考虑到,从
r 开始的循环节不包含0 \to r - 1 所以还要取模
参考文章:循环节与拓展欧拉定理(广义欧拉降幂)