原题目:
https://codeforces.com/contest/615/problem/D
疑惑点:
一个数的指数会爆i64,所以采用小费马定理不断地取模,确保不爆掉,但是不理解的是,有题解用的是 2×(mod−1)),请问这是为什么,为什么使用模数 mod−1就会导致错误,如果能解答,能麻烦给我一个例子吗?
for (auto [u, v] : mp)
{
num = num * (v + 1) % (2 * (mod - 1));
if(v & 1)
ok = false;
else
origin = origin * ksm(u, v / 2) % mod;
}
完整的代码:
https://www.luogu.com.cn/paste/44vje9h4