分享:最大公约数的三种算法

控制算法  / 只看大图  / 倒序浏览  © 著作权归作者所有感觉不错,请素质四连!点赞,收藏,加关注,送评分

#楼主# 2022-5-31

感觉不错,请素质四连哦!点赞,收藏,加关注,送评分!
跳转到指定楼层
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
关于最大公约数常见算法有三种:辗转相除法、更相减损法、Stein算法

其中前两种算法编写简单,过程有些类似,但是算数相差较大或数值本身较大会引起过大的计算量。最后一种算法分类复杂,但是在算数过大时可以有效的减少计算量,所以在实际使用中可以对数据判断大小选择不同方式来计算。
提示:谨防while、repeat此类循环不限次数引发的宕机,建议增加限制次数EXIT的保护。
下面介绍内容,原理证明可自行百度。

1.辗转相除法(欧几里得算法)

  gcd( a,b ) = gcd( a,a%b );
  令a%b = c,循环求余计算
(1)c = 0,则b为最大公约数
(2)c != 0,则让a = b, b = c,执行a%b = c直到满足(1)

image.png


2.更相减损法

gcd( a,b ) = gcd( a,a-b );
  令a、b循环相减计算
(1)a = b,则a或b就是最大公约数
(2)a != b,若a>b,则a = a-b;若a<b,则b = b-a;执行到满足(1)
image.png


3.Stein算法
  核心:奇偶分类概念
  首先规定,a>b
(1)均为偶数 gcd( a,b ) =2gcd( a/2,b/2 );
(2)均为奇数 gcd( a,b ) = gcd( (a+b)/2,(a-b)/2 );
(3)a奇b偶    gcd( a,b ) = gcd( a,b/2 );
(4)a偶b奇    gcd( a,b ) = gcd( a/2,b );

由上面不难看出,Stein算法按照奇偶性质进行2的n次方处理,即幂函数。对比相除相加的算法,幂计算在处理较大的数据时阶数逐渐降低,计算优势明显。


不论是哪种方法,都是给出了有关gcd(a,b)的性质,在实际计算中,完全可以将这些性质打乱重组灵活运用,最终目的就是快速计算出结果。


分享以学习交流为目的,如有错误请指正。





上一篇:缺水滴缺水滴
下一篇:CodeSys平台(汇川)以太网通讯功能块程序源代码

已有 0 人打赏作者

0
回复 邀请回答送花

使用道具

Slimming 发表于 2022-5-31 14:16:08
补充一点关于最小公倍数的,
最小公倍数=a*b/最大公约数
回复 送花

使用道具 举报

陌陌 发表于 2022-5-31 16:36:15
还有一个笨办法,数字同时小于两个数字时,从1开始挨个试,如果同时满足整除取余等于零就赋值给另一个数值,然后加一,再试,直至大于其中一个数时结束。
回复 送花

使用道具 举报

Slimming 发表于 2022-5-31 22:34:17
陌陌 发表于 2022-5-31 16:36
还有一个笨办法,数字同时小于两个数字时,从1开始挨个试,如果同时满足整除取余等于零就赋值给另一个数值 ...

兄弟,穷举法太耗资源了,plc怕是吃不消哇
回复 送花

使用道具 举报

陌陌 发表于 2022-6-9 11:07:03
目前试着用ST编写这个程序,可是有一个问题,如果被除数小于除数,那么需要数值调换,可结果IF指令似乎只能执行BOOL类命令
回复 送花

使用道具 举报

陌陌 发表于 2022-6-9 12:56:57
陌陌 发表于 2022-6-9 11:07
目前试着用ST编写这个程序,可是有一个问题,如果被除数小于除数,那么需要数值调换,可结果IF指令似乎只能 ...

习惯了C程的编程,漏打冒号了,导致直接报错
回复 送花

使用道具 举报

吴王 发表于 2022-6-9 13:32:19
用在哪儿?没用过呢,
回复 送花

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

关于作者

Slimming

3级中雨(Lv.9)

  • 主题

    22

  • 帖子

    231

  • 关注者

    2

Archiver|手机版|小黑屋|汇川技术-水滴社区 |苏ICP备12002088号
Powered by Discuz! X3.4  © 2019-2100 INOVANCE INC.