crt&excrt 学习笔记
crt
问题
求解同余方程组
解法
解:设
通解为
证明:因为
所以有特解
因为
实现
for (int i=1;i<=n;i++)
{
m[i]=read(); a[i]=read();
mul*=m[i];
}
for (int i=1;i<=n;i++)
{
M[i]=mul/m[i];
x=0; y=0;
exgcd(M[i],m[i]);
ans+=a[i]*M[i]*((x+m[i])%m[i]);
}
excrt
问题
上方去掉互质的约束。
解法
假设已经求出了前
记
则前
考虑加入第
即
然后用 exgcd 求解,若同余式无解则方程无解,否则前
实现
int excrt()
{
Lcm=1; ans=0;
for (int i=1;i<=n;i++)
{
int A=Lcm,B=b[i],C=(a[i]-ans%B+B)%B,g=exgcd(A,B);
if (C%g!=0) return -1;
(x*=C/g)%=B/g;
ans+=x*Lcm;
Lcm*=B/g;
ans=(ans%Lcm+Lcm)%Lcm;
}
return ans;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探