首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:获取最大公约数

Java:获取最大公约数
EN

Stack Overflow用户
提问于 2010-10-25 00:40:11
回答 14查看 218.8K关注 0票数 100

我已经看到BigInteger存在这样一个函数,即BigInteger#gcd。Java中是否有其他函数也适用于其他类型(intlongInteger)?这看起来像java.lang.Math.gcd一样有意义(有各种重载),但它不在那里。是在别的地方吗?

(请不要将这个问题与“我如何自己实现这个”混淆起来!)

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-10-25 00:46:06

对于int和long,作为原语,并不是真的。对于Integer,可能有人写了一个。

假设BigInteger是int、Integer、long和Long的(数学/函数)超集,如果需要使用这些类型,请将它们转换为BigInteger,执行GCD,然后再将结果转换回来。

代码语言:javascript
复制
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();
}
票数 92
EN

Stack Overflow用户

发布于 2010-10-25 00:50:14

据我所知,没有任何原语的内置方法。但是,像这样简单的东西应该能起到作用:

代码语言:javascript
复制
public int gcd(int a, int b) {
   if (b==0) return a;
   return gcd(b,a%b);
}

如果你对这类东西感兴趣,你也可以给它加一行:

代码语言:javascript
复制
public int gcd(int a, int b) { return b==0 ? a : gcd(b, a%b); }

应该注意的是,这两者之间绝对没有区别,因为它们编译成相同的字节码。

票数 146
EN

Stack Overflow用户

发布于 2010-10-25 01:31:39

或者计算GCD的欧几里德算法。

代码语言:javascript
复制
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;
}
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4009198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档