博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧几里得算法求最大公约数的递归和非递归实现
阅读量:4286 次
发布时间:2019-05-27

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

在数学中,欧几里得算法,又称辗转相除法,是求最大公约数(greatest common divisor)的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。

两个整数的最大公约数是能够同时整除它们的最大的正整数。

辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 − 105 = 21 × (12 − 5) = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。

递归公式表示位:

gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)

/**     * 欧几里得算法求最大公约数     * 连续计算余数知道余数是0为止,最后的非零余数就是最大公因数     * @param m     * @param n     * @return     */    public static long gcd(long m, long n) {        while (n != 0) {            long rem = m % n;            m = n;            n = rem;        }        return m;    }    /**     * 欧几里得算法求最大公约数     * 递归实现     */    public static long gcd(int a,int b) {          return b > 0 ? gcd(b, a%b) : a;      }

参考

1. 辗转相除法,维基百科,自由的百科全书,

转载地址:http://fuxgi.baihongyu.com/

你可能感兴趣的文章
java实现导出excel表到磁盘上(三)---完整封装,可直接使用
查看>>
window安装git图文详解—GIT入门篇
查看>>
error: pathspec '测试2' did not match any file(s) known to git.
查看>>
昵称中含有特殊符号存入mysql数据库处理
查看>>
mybatis中模糊查询时一个字段匹配不定量数据解决方法
查看>>
nginx配置https后重新启动
查看>>
linux环境下安装nginx步骤
查看>>
linux安装redis 完整步骤
查看>>
用java获取指定时区的时间
查看>>
搭建SVN服务器步骤详解
查看>>
javax.mail.MessagingException: 500 Error: bad syntax问题
查看>>
JAVA判断字符串是否base64编码
查看>>
linux(CentOS7.4) 安装 Nginx 1.15.2
查看>>
spring shiro redis : 将session存入redis,实现session共享
查看>>
网站使用QQ互联接入第三方登录,实现qq快捷登录网站的功能
查看>>
第三方网站应用微信登录开发指南
查看>>
网站接入微博快捷登录-微博开放平台
查看>>
linux centos 使用yum安装java
查看>>
微信商户支付开发中的三套商户
查看>>
微信开放平台和公总平台关系图
查看>>