我已经看到BigInteger
存在这样一个函数,即BigInteger#gcd
。Java中是否有其他函数也适用于其他类型(int
、long
或Integer
)?这看起来像java.lang.Math.gcd
一样有意义(有各种重载),但它不在那里。是在别的地方吗?
(请不要将这个问题与“我如何自己实现这个”混淆起来!)
发布于 2010-10-25 00:46:06
对于int和long,作为原语,并不是真的。对于Integer,可能有人写了一个。
假设BigInteger是int、Integer、long和Long的(数学/函数)超集,如果需要使用这些类型,请将它们转换为BigInteger,执行GCD,然后再将结果转换回来。
private static int gcdThing(int a, int b) {
BigInteger b1 = BigInteger.valueOf(a);
BigInteger b2 = BigInteger.valueOf(b);
BigInteger gcd = b1.gcd(b2);
return gcd.intValue();
}
发布于 2010-10-25 00:50:14
据我所知,没有任何原语的内置方法。但是,像这样简单的东西应该能起到作用:
public int gcd(int a, int b) {
if (b==0) return a;
return gcd(b,a%b);
}
如果你对这类东西感兴趣,你也可以给它加一行:
public int gcd(int a, int b) { return b==0 ? a : gcd(b, a%b); }
应该注意的是,这两者之间绝对没有区别,因为它们编译成相同的字节码。
发布于 2010-10-25 01:31:39
或者计算GCD的欧几里德算法。
public int egcd(int a, int b) {
if (a == 0)
return b;
while (b != 0) {
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}
https://stackoverflow.com/questions/4009198
复制相似问题