专栏文章

题解:P12540 [XJTUPC 2025] 离散对数

P12540题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip98lrl
此快照首次捕获于
2025/12/03 08:14
3 个月前
此快照最后确认于
2025/12/03 08:14
3 个月前
查看原文
abbc(modp)a^b \equiv b^c \pmod{p}
不妨令 ba(modp)b \equiv a \pmod{p},则 abac(modp)a^b \equiv a^c \pmod{p},因为 pp 是质数,且 a<pa<p,所以 aapp 互质,根据费马小定理 ap11(modp)a^{p-1} \equiv 1\pmod{p},可得 bc(modp1)b \equiv c \pmod{p-1}
所以
b \equiv a\pmod{p}\\ b \equiv c \pmod{p-1} \end{cases} $$ $(p-1)(p-1) \equiv p^2-2p+1 \equiv 1\pmod{p}$,所以 $p-1$ 在模 $p$ 意义下的逆元为 $p-1$。 $p\equiv 1 \pmod{p-1}$,所以 $p$ 在模 $p-1$ 意义下的逆元为 $1$。 又因为 $p$ 与 $p-1$ 互质,根据中国剩余定理(CRT),答案即为 $(a(p-1)^2+c\cdot p) \mod{p(p-1)}$。 其中 $p(p-1)$ 接近 $10^{18}$,中间运算可能超过 `long long`,需用 `__int128`。 参考代码: ```cpp #include<iostream> using namespace std; using ll=long long; using lll=__int128; int main(){ ll a,c,p; cin>>a>>c>>p; lll mod=p*(p-1); cout<<ll((lll(a)*(p-1)%mod*(p-1)+lll(c)*p)%mod); } ```

评论

0 条评论,欢迎与作者交流。

正在加载评论...