题解
对于每个肥宅 \(i\) 考虑,第 \(m\) 天的体重显然应该是 \(k_i^m\bmod g_i\),对于目标体重 \(r_i\),会得到如下式子:
换个显然的形式:
注意到这里 \(p\) 不是质数,显然是一个 exBSGS 可以求解的问题。
然而只有一个特解 \(u\) 并不能解决「有多个肥宅,求至少需要经过的天数」这样的问题,我们需要找出它的通解。
假设现在用 exBSGS 求出了一个特解 \(u\),设再过 \(d\) 天又能符合条件。
显然这个 \(d\) 就是满足 \(a^{u+d}\equiv a^u\pmod{p}\) 的最小正整数解。
看起来是要求 \(a^d\equiv1\pmod{p}\) 的最小正整数解。
这里已经非常显然了,根据阶有关的知识,其实就是求 \(\delta_p(a)\)。
求阶的方式也很简单:
- 若 \(\gcd(a,p)>1\) 时无解,此时原同余方程只有一个特解 \(u\)。
- 否则有 \(a^{\varphi(p)}\equiv1\pmod{p}\),必有 \(\delta_p(a)\mid\varphi(p)\),对 \(\varphi(p)\) 不断试除质因子即可得到 \(\delta_p(a)\)。原同余方程的通解为 \(x\equiv u\pmod{\delta_p(a)}\)。
当你迫不及待地求出阶后,便开心地发现自己在样例 #4(\(a=14,b=44,p=60\))WA 了。
实际上要求的并不是 \(\delta_p(a)\)。
看下原目标:\(a^{u+d}\equiv a^u\pmod{p}\),即 \(a^db\equiv b\pmod{p}\)。
此处并没有说 \(b\perp p\),\(b^{-1}\) 可能并不存在,所以不能直接消掉 \(b\)。
也挺好解决的,记 \(t=\gcd(p,b),p'=\frac{p}{t}\),有\(a^d\times\frac{b}{t}\equiv\frac{b}{t}\pmod{p'}\),此时 \(\frac{b}{t}\perp p'\),可以直接消掉。
所以要求的应该是 \(\delta_{p'}(a)\)。
现在变成了求阶线性同余方程组了(\(g_i'=\frac{g_i}{\gcd(g_i,r_i)}\),应该挺显然的):
此处显然也不保证模数互质,需要使用 exCRT。
当你迫不及待地求出答案后,发现自己又听取 WA 声一片:
正确操作:当发现要做 CRT 之后,第一时间观察 \(g_i\) 的 \(\operatorname{lcm}\) 性质。发现,没有性质。来人,上高精
合并 \(\operatorname{lcm}\) 是做不了了,考虑什么情况下可以不合并。
如果求出了某个答案 \(x\),发现它能符合所有的同余方程,这时候显然没有必要去取 \(\operatorname{lcm}\) 了。
假设前 \(k\) 个同余方程解出的答案是 \(x\equiv ans\pmod{M}\)(\(M>10^9\)),我们考虑直接尝试 \(A\) 能否符合第 \(k+1\) 个方程。如果不行的话,显然要合并。
看下如果要合并,exCRT 老师会发生甚么事(代码来自 exCRT 模板题解):
ans += x*M
!答案直接加上若干个 \(M\),显然是超过 \(10^9\) 范围了,此时可以直接返回无解。
当然,和屠龙勇士类似,本题的最终答案一定要大于 \(\max\{u_i\}\),最后需要加一下。