求最大公约数(欧几里得和连续整数检测)java描述

欧几里得算法

基本原理

反复执行下面的等式:
gcd(m,n) = gcd(n,m mod n)
(m mod n 表示m除以n之后的余数)

例如:gcd(60,24) = gcd(24,12) = gcd(12,0) = 12

描述:

1:如果n=0,返回m的值作为结果,同时过程结束;否则,进入步骤2。

2:m除以n,将余数付给r。

3:将n的值赋给m,将r的值赋给n,返回步骤1。

java代码

    public static int gcd(int m,int n){
        while (n!=0){
            int r = m%n;
            m=n;
            n=r;
        }
        return m;
    }

连续整数检测法

描述:

1:将min{m,n}的值赋给t。
2:m除以t。如果余数为0,进入步骤3;否则进入步骤4.
3:n除以t。如果余数为0,返回t的值作为结果,否则进入步骤4。
4:把t的值减1.返回步骤2

java代码

public static int ctd(int m,int n){
        int t = Math.min(m, n);
        while (t>0){
            if (m%t==0&&n%t==0){
                return t;
            }
            t--;
        }
        return Math.max(m, n);
    }
posted @ 2020-02-17 13:21  UtilMan  阅读(485)  评论(0编辑  收藏  举报