首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >exgcd学习笔记

exgcd学习笔记

作者头像
yzxoi
发布2022-09-19 11:28:41
2860
发布2022-09-19 11:28:41
举报
文章被收录于专栏:OIOIOI

exgcd学习笔记

前言

今天膜你赛竟然要套exgcd

gcd

inline int gcd(int a,int b){
    return !b?a:gcd(b,a%b);
}

exgcd

形如ax+by=c的方程,当gcd(a,b)c时,存在整数解x,y。 也就是说exgcd可以解ax+by=gcd(a,b)的方程。 令a=b,b=a\mod b,那么bx+a\mod b\times y=gcd(b,a\mod b)。 因为gcd(a,b)=gcd(b,a\mod b)。 所以bx+a\mod b\times y=gcd(a,b)。 又因为a\mod b=a-b\times \lfloor {a/b} \rfloor 所以bx+(a-b\times \lfloor {a/b} \rfloor)\times y =gcd(a,b)。 整理得:a\times y+b\times (x-\lfloor {a/b} \rfloor)=gcd(a,b)。 所以可以转化为x_{new}=y,y_{new}=x-\lfloor {a/b} \rfloor,继续求解即可。 当b=0时,y=0,x=1,gcd=a

inline void exgcd(int a,int b,int &x,int &y,int &gcd){
    if(!b) gcd=a,y=0,x=1;
    else{
        gcd(b,a%b,x,y,gcd);
        int tmp=x;x=y;y=tmp-(a/b)*y;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • exgcd学习笔记
    • 前言
      • gcd
        • exgcd
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档