求最大公约数

Posted

技术标签:

【中文标题】求最大公约数【英文标题】:Finding the greatest common divisor 【发布时间】:2014-09-01 16:10:20 【问题描述】:

根据他们在纸上解决这个问题的方式:

http://www.wikihow.com/Find-the-Greatest-Common-Divisor-of-Two-Integers

我正在尝试使用 108 作为 m 和 30 作为 n 来求解 Java 中的最大公约数。问题是,当我运行程序时,结果最终为 0。我知道我可以这样做,因为我自己编写了代码,但每次编写这样的方法时都会遇到一个绊脚石:

public static double getGcd_nr(int m, int n)
    int dividend = m;
    int divisor = n;
    int quotient = dividend/divisor;
    int remainder = dividend % divisor;
    int gcd = 0;

    for(int i = divisor * quotient + remainder; i > 0; i--)
        dividend = divisor;
        divisor = remainder;
        if (remainder == 0)
            gcd = divisor;
        
    
    return gcd;

请你帮我完成我需要完成的事情。我需要编写自己的代码,而不是复制别人的代码。

【问题讨论】:

您是要重新计算quotientremainder 吗?我假设是这样,因为dividend 的(当前多余的)重新分配。你不是;重新分配 dividenddivisor 不是一回事。 【参考方案1】:
while(m!=n)

  if(m >= n-1)
     m = m-n;
  else 
     n = n - m;  

return m;

一种用于查找两个数字的 gcd 的非递归解决方案。

【讨论】:

以上是关于求最大公约数的主要内容,如果未能解决你的问题,请参考以下文章

python 求最大公约数

用辗转相除法求2个数的最大公约数,怎么做?

求最大公约数?怎么求? 具体的方法和过程

5快速求乘求最大公约数

如何求两数的最大公约数?

用辗转相除法求两个整数的最大公约数