Euclid算法结果不正确

时间:2013-05-15 14:15:33

标签: java algorithm

我正在尝试编写Euclid算法的Java实现:我的方法体看起来像这样:

    while(a%b != 0) {
        int newA = b * ((int) Math.floor(a/b));
        int newB = a - newA;

        a = newA;
        b = newB;
    }
    return a;

然而,我一直得到不正确的结果......我认为我有一个逻辑错误,但实在无法理解它在哪里:\

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

Euclid的算法如下:

  1. 如果< b,交换(a,b);
  2. [a,b] = [b,a%b],直到%b == 0;
  3. return b。
  4. 您的代码存在多个问题,但更突出的问题是您要返回a而不是b

    另一件事:不要试图重新发明%(余数)运算符。

答案 1 :(得分:3)

在Euclid算法中,每个步骤a必须分配旧b,b必须分配%b。你正确地计算了b的新值,但是你正在计算类似a = a - a%b的东西。

为了便于修复,您只需将您为a设置值的行替换为:

a = b;

(即在设置新b之前)

答案 2 :(得分:1)

我认为这对你有很大帮助。 Euclid Algorithm in Java

<强>代码

// non-recursive implementation
public static int gcd2(int p, int q) {
    while (q != 0) {
        int temp = q;
        q = p % q;
        p = temp;
    }
    return p;
}