我正在尝试编写Euclid算法的Java实现:我的方法体看起来像这样:
while(a%b != 0) {
int newA = b * ((int) Math.floor(a/b));
int newB = a - newA;
a = newA;
b = newB;
}
return a;
然而,我一直得到不正确的结果......我认为我有一个逻辑错误,但实在无法理解它在哪里:\
有什么想法吗?
答案 0 :(得分:4)
Euclid的算法如下:
您的代码存在多个问题,但更突出的问题是您要返回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;
}