辗转相除法
来源:互联网 发布:seo点击软件 编辑:程序博客网 时间:2024/05/29 17:44
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。
设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)。
设两数为a、b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a mod b 为a除以b以后的余数,k为a除以b的商,即a÷b=k.......r。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。
第一步:令c=gcd(a,b),则设a=mc,b=nc
第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根据第二步结果可知c也是r的因数
第四步:可以断定m-kn与n互质【否则,可设m-kn=xd,n=yd,(d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)cd,b=nc=ycd,故a与b最大公约数成为cd,而非c,与前面结论矛盾】
从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。
证毕。
也就是说:递归函数:R(a,b)
如果b=0,那么R=a
否则,R=R(b,a mod b).
代码如下:
functionps(x,y:longint):longint;
begin if y=0 then exit(x) else exit(ps(y,x mod y));end;
阅读全文
0 0
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 辗转相除法 最大公约数
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 温习辗转相除法
- 辗转相除法
- 辗转相除法
- 辗转相除法
- 证明辗转相除法
- 辗转相除法
- CodeForces
- Spring与ActiveMQ整合
- 泛型小结
- hdu2818(带权并查集)
- 克鲁斯卡尔算法求最大/最小生成树
- 辗转相除法
- Pull解析方式
- Autowired 区别 Resource Spring中 @Autowired注解与@Resource注解的区别
- 教你彻底学会动态规划——入门篇
- CSS学习重点总结(一)
- thinkphp3.1.2 URL
- git安装后的配置项
- 频道管理方法二
- LoRa信道争抢怎么办?传说中的冲突退避管用吗?