Java:获得最大公约数
2022-08-31 10:02:40
我已经看到这样的函数存在于 ,即 BigInteger#gcd
。Java中是否有其他函数也适用于其他类型的(或)?这似乎是有道理的(对于各种过载),但它不存在。是别的吗?BigInteger
int
long
Integer
java.lang.Math.gcd
(请不要将这个问题与“我自己如何实现这一点”混淆,拜托!
我已经看到这样的函数存在于 ,即 BigInteger#gcd
。Java中是否有其他函数也适用于其他类型的(或)?这似乎是有道理的(对于各种过载),但它不存在。是别的吗?BigInteger
int
long
Integer
java.lang.Math.gcd
(请不要将这个问题与“我自己如何实现这一点”混淆,拜托!
据我所知,没有任何内置的基元方法。但是像这样简单的东西应该可以解决问题:
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); }
应该注意的是,两者之间绝对没有区别,因为它们编译为相同的字节码。
对于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();
}