程序技术好文:欧几里德算法

简介: 程序技术好文:欧几里德算法

欧几里德算法


欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:


定理:gcd(a,b) = gcd(b,a mod b)


证明:a可以表示成a = kb + r,则r = a mod b


假设d是a,b的一个公约数,则有


d|a, d|b,而r = a - kb,因此d|r


因此d是(b,a mod b)的公约数


假设d 是(b,a mod b)的公约数,则


d | b , d |r ,但是a = kb +r


因此d也是(a,b)的公约数


因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证


--------------------------------------------//代码效果参考:http://www.lyjsj.net.cn/wz/art_24111.html

---------------------

模P乘法逆元


对于整数a、p,如果存在整数b,满足ab mod p =1,则说,b是a的模p乘法逆元。


定理:a存在模p的乘法逆元的充要条件是gcd(a,p) = 1


证明:


首先证明充分性


如果gcd(a,p) = 1,根据欧拉定理,aφ(p) ≡ 1 mod p,因此


显然aφ(p)-1 mod p是a的模p乘法逆元。


再证明必要性


假设存在a模p的乘法逆元为b


ab ≡ 1 mod p


则ab = kp +1 ,所以1 = ab - kp


因为gcd(a,p) = d


所以d | 1


所以d只能为1


-----------------------------------------------------------------------


扩展欧几里德算法


扩展欧几里德算法不但能计算(a,b)的最大公约数,而且能计算a模b及b模a的乘法逆元,用C语言描述如下:


intgcd(inta,intb,int&ar,int&br)


{


intx1,x2,x3;


inty1,y2,y3;


intt1,t2,t3;


if(0==a)


{//有一个数为0,就不存在乘法逆元


ar=0;


br=0;


returnb;


}


if(0==b)


{


ar=0;


br=0;


returna;


}


x1=1;


x2=0;


x3=a;


y1=0;


y2=1;


y3=b;


intk;


for(t3=x3%y3;t3!=0;t3=x3%y3)

//代码效果参考: http://www.lyjsj.net.cn/wx/art_24109.html


{


k=x3/y3;


t2=x2-ky2;


t1=x1-ky1;


x1=y1;


x1=y2;


x3=y3;


y1=t1;


y2=t2;


y3=t3;


}


if(y3==1)


{


//有乘法逆元


ar=y2;


br=x1;


return1;


}else{


//公约数不为1,无乘法逆元


ar=0;


br=0;


returny3;


}


}


扩展欧几里德算法对于最大公约数的计算和普通欧几里德算法是一致的。计算乘法逆元则显得很难明白。我想了半个小时才想出证明他的方法。


首先重复拙作整除中的一个论断:


如果gcd(a,b)=d,则存在m,n,使得d = ma + nb,称呼这种关系为a、b组合整数d,m,n称为组合系数。当d=1时,有 ma + nb = 1 ,此时可以看出m是a模b的乘法逆元,n是b模a的乘法逆元。


为了证明上面的结论,我们把上述计算中xi、yi看成ti的迭代初始值,考察一组数(t1,t2,t3),用归纳法证明:当通过扩展欧几里德算法计算后,每一行都满足a×t1 + b×t2 = t3


第一行:1 × a + 0 × b = a成立


第二行:0 × a + 1 × b = b成立


假设前k行都成立,考察第k+1行


对于k-1行和k行有


t1(k-1) t2(k-1) t3(k-1)


t1(k) t2(k) t3(k)


分别满足:


t1(k-1) × a + t2(k-1) × b = t3(k-1)


t1(k) × a + t2(k) × b = t3(k)


根据扩展欧几里德算法,假设t3(k-1) = j t3(k) + r


则:


t3(k+1) = r


t2(k+1) = t2(k-1) - j × t2(k)


t1(k+1) = t1(k-1) - j × t1(k)



t1(k+1) × a + t2(k+1) × b


=t1(k-1) × a - j × t1(k) × a +


t2(k-1) × b - j × t2(k) × b


= t3(k-1) - j t3(k) = r


= t3(k+1)


得证


因//代码效果参考:http://www.lyjsj.net.cn/wz/art_24107.html

此,当最终t3迭代计算到1时,有t1× a + t2 × b = 1,显然,t1是a模b的乘法逆元,t2是b模a的乘法逆元。
相关文章
|
18天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
19 3
|
30天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-19
46 2
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
29 1
|
30天前
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
45 1
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-14
37 1
|
23天前
|
缓存 分布式计算 监控
算法优化:提升程序性能的艺术
【10月更文挑战第20天】算法优化:提升程序性能的艺术
|
30天前
|
存储 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18
36 0
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
57 0
|
25天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。