博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展欧几里得学习小记
阅读量:6116 次
发布时间:2019-06-21

本文共 1090 字,大约阅读时间需要 3 分钟。

扩展欧几里得是干什么的?给定两个数a,b,设Gcd(a,b)=d(d是a,b的最大公约数),则存在整数x,y,使得x*a+y*b=d。

扩展欧几里得可以求出x,y。怎么求呢?我们知道,Gcd(a,b)=Gcd(b,a%b),而我们也就是运用这个东西来求a和b的最大公约数的。

因此,设bx+(a%b)y=d,即bx+(a-a/b*b)y=d,所以:ay+b*(x-a/b*y)=d。因此我们可用下面的代码解决:

 

int64 exGcd(int64 a,int64 b,int64 &x,int64 &y)

{
    int64 r,t;
    if(b==0)
   {
       x=1;
       y=0;
       return a;
   }
   r=exGcd(b,a%b,x,y);
   t=x;
   x=y;
   y=t-a/b*y;
   return r;

}

这个程序返回值为Gcd(a,b),ax+by=Gcd(a,b),其中x,y分别存在x,y中。

当然,如果给出的是求ax+by=c,这时当且仅当Gcd(a,b)可以整除c时x,y有整数解。这个很好证明,设Gcd(a,b)=d,那么a=d*k1,b=d*k2,所以ax+by=d*(k1*x+k2*y),即ax+by必为d的倍数,所以c必为d的倍数,即d必能整除c。这样的话,先求ax+by=d的一组解x0,y0,设k=c/d,则k*x0,k*y0就是一组解。

 

另外,扩展欧几里得可以求乘法逆元。乘法逆元的意思就是对于a,p,若存在b使得ab%p=1,则称b为a对p的乘法逆元。那么这个b有什么意思呢?对于一个数x,x/a%p=x*b%p(a可以整除x)。这样的话,就可以将除法变为乘法,那么为什么上式成立呢?设x=k*a,则x/a%p=k%p=(k%p)*(ab%p)=(k*a*b)%p=x*b%p。那么怎么求b呢?ab%p=1,我们可得ab=kp+1(k为某个整数),即ab-kp=1,令x=b,y=-k,则我们求出ax+py=1的一组解x,y即可。这个式子有解的充要条件是Gcd(a,p)=1.

证明如下:

(1)若Gcd(a,p)=1,有欧拉定理,设Ψ(x)表示x的欧拉函数(Ψ(x)是一个数,是[1,x-1]中与x互质的数的个数),(a^Ψ(x))%p=1,所以b=a^(Ψ(x)-1)就是一个答案;

(2)若ab%p=1,则ab=kp+1,ab-kp=1,设Gcd(a,p)=d,则d必能整除1,所以d只能是1。

这样的话就能用上面的代码求了。。。

转载于:https://www.cnblogs.com/jianglangcaijin/p/3446822.html

你可能感兴趣的文章
直播视频流技术名词
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
linux系统安装的引导镜像制作流程分享
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>