/*小步大步算法+费马小定理求逆元
如果p为素数,a为整数,则a^(p-1)=1(mod p) -> a^(p-2)=(a^(-1))(mod p),又想了下,这个条件成立要a<p;那么一开始取模就行了。
Baby-Steps-Giant-Steps算法
高次同余方程。 A^x== B (mod C)
这里用到baby_step,giant_step算法。意为先小步,后大步。
令x=i*m+j (m=ceil(sqrt(p))),
那么原式化为 A^(i*m)*A^j==B(MOD C) ————> A^j===B*A^(-i*m)(MOD C)
我们先预处理A^0,A^1,A^2……A^(m-1),存入HASH表。,这一步就是baby-step,每次移动1
然后求出A^-m,枚举i,如果存在A^(-i*m)存在于HASH表中,说明存在解x=i*m+j ,这一步为giant_step,每次移动m
至于B^(-m)的求法,可以先求出B的逆元,也就是B^-1。
注意以上解法是最基本的,只能对于C为素数
*/
//数据比较大,凡是有相乘的地方都要注意溢出
//Accepted 4608K 4032MS G++ 1365B 莫名通过
#include<cstdio>
#inclu