exgcd

什么是exgcd

exgcd 是用来求解不定方程、逆元等问题的工具

可以求解方程ax+by=gcd(a,b)并返回 gcd

代码

Copy Code

说明

x,y 的求值方法

  • a=b,b=amodb
  • ax+by=gcd(a,b)
  • 根据一般 gcd 的方法可知 gcd(a,b)=gcd(a,b)
  • ax+by=gcd(a,b)
  • bx+(amodb)y=gcd(a,b)
  • amodb=aab×b (以下下取整除用 / 表示)
  • bx+(aa/b×b)y=gcd(a,b)
  • 提取a/b×by
  • b(a/b×y)+ay=gcd(a,b)

因此对应原来x, y的就是y, x-a/b*y

功能

1. 解形如 ax+by=c 的不定方程

可以直接通过exgcd的本来含义转化
原: 求ax+by=gcd(a,b)

c可以被 gcd(a,b) 整除时,则此方程有整数解,设 m=cgcd(a,b),则可以得一组特解 mp,mq ( p,qexgcd(a,b,p,q)的值),设 gcd(a,b)=g

在解 mp,mq 成立的情况下,解 mp+b,mqa 也成立,所以可以通过取模的方法求出 xy 的最小值,x 的最小值为 mp%bgy 的最小值为 mqmodag

注意,在实际使用中,exgcd 并不能处理 a,b 是负数的情况,当 a,b 是负数时,一般根据题意采取等价的取相反数做法

在实际的取模中,最好加上多倍的模数,避免负数

posted @   RiverHamster  阅读(2176)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
\
点击右上角即可分享
微信分享提示