【数论】扩展欧几里得算法(EXTENDED-EUCLID)

本文整理梳理了一些有关扩欧算法的内容,力求深入浅出便于理解,对一些作者在初次接触此算法时的不解(比如一些不是很好看出来的“易得”“显然”hh)通过数学形式呈现与推导。本文涉及的数学推导非常简单。代码均采用C++。

限于作者能力有限可能有些地方表述不清,请读者多多包含!

【预备知识】

1.基础数论概念(整除、质数合数、gcd/lcm…或者说你已经懂了辗转相除法是怎么用)

2.递归、子函数

就让我们从原本的欧几里得算法开始。

【欧几里得算法】(EUCLID 即辗转相除法)
//a,b均为任意非负整数且不同时为零

int gcd(int a,int b)
{
if(b==0) return a;
else return gcd(b,a%b); 
}

通过此可以求出a,b的最大公约数。

【扩展欧几里得算法】

就是欧几里得算法的推广,用于计算满足d=gcd(a,b)=ax+by的整系数x和y。

贝祖定理
若a,b是整数,设d=gcd(a,b), 那么对于任意的整数x、y, d|ax+by,   (p|q 表示p整除q)
特别地,一定存在整数x,y,使ax+by=d成立。

【应用1】求一元二次线性方程的整数解(ax+by=c)

 [ 思路 ]

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值