我的 gcd 程序得到错误的值

getting wrong value with my gcd program

我刚写了一个程序来计算两个数的gcd。我用数字 6 和 4 测试了它。我的程序 returns 结果是 4,这显然是错误的,因为 6 和 4 的 gcd 是 2.

import javax.swing.*;

public class Zahlen {
  public static long gcd(long m, long n){
    m = Long.parseLong(JOptionPane.showInputDialog("Enter value for m"));
    n = Long.parseLong(JOptionPane.showInputDialog("Enter value for n"));
    long tmp;
    while (n > 0) { 
      tmp = n;
      m = n;
      n = m;
      n = n%m;
    } // end of while
    return m;
  }

  public static void main(String[] args){
    System.out.print(Zahlen.gcd(6,4));
  }
}

您的算法代码不正确。片段

m = n;
n = m;

没有做任何有用的事情,分配给 tmp 的值也没有做任何事情。

求余数,然后把n的值赋给m,再把余数赋给n。为此目的使用 tmp

while (n > 0) {
    tmp = m%n;
    m = n;
    n = tmp;
}

此外,如果您已经有参数,为什么还要在方法 gcd 中向用户询问 mn 值?要么不在 gcd 中询问,只使用参数,要么将 JOptionPane 代码移动到 main,然后将用户的号码传递到 gcd 那里。

您可以从 main 方法调用以下函数(不使用递归):

public static int gcd(int n, int m){
    int gcd=1;
    int upto=n>m?m:n;

    for(int i=1;i<=upto;i++){
       if(n%i==0 && m%i==0){
            gcd=i;
        }
    }
   return gcd;
}

这对我有用。我用 int 做到了,但将它转换为 long 并不难。

int m = Integer.parseInt(JOptionPane.showInputDialog("Enter value for m"));
         int n = Integer.parseInt(JOptionPane.showInputDialog("Enter value for n"));
        int i =1;
        int gcd=1;
        while(m>n?i<=n:i<=m){
            if(m%i==0&& n%i==0){
                gcd=i;
            }
            i++;
        }
        System.out.println(gcd);}