【问题标题】:What does "hybridGCD" method do in Java BigInteger Class?Java BigInteger 类中的“hybridGCD”方法有什么作用?
【发布时间】:2019-08-05 08:08:10
【问题描述】:

我正在查看 Java BigInteger gcd 方法源代码。我发现了在类的任何地方都没有定义的 hybridGCD() 方法。

这里是链接: http://hg.openjdk.java.net/jdk/jdk11/file/tip/src/java.base/share/classes/java/math/BigInteger.java

public BigInteger gcd(BigInteger val) {
    if (val.signum == 0)
        return this.abs();
    else if (this.signum == 0)
        return val.abs();

    MutableBigInteger a = new MutableBigInteger(this);
    MutableBigInteger b = new MutableBigInteger(val);

    MutableBigInteger result = a.hybridGCD(b);

    return result.toBigInteger(1);
}

gcd 方法在一个小时内没有响应两个相当大的数字(每个都包含百万位数)。

【问题讨论】:

  • 我不知道hybridgcd到底是做什么的,但是运行时间是有道理的。很可能是欧几里得算法。它执行多个 a % b 操作,这应该是相当昂贵的(n^2 或 n^3,iirc,其中 n 是长度)。该算法执行此操作 O(n) 次,因此会很长。
  • 我曾经看过 GCD 算法用于非常大的操作数。我发现 GMP(Gnu Multiprecision 库,一个 C/C++ 库)包含优于其他 BigInt 库的算法。不仅更快,因为它是本机代码,而且更快,因为它是一种更好的算法。如果您决心实现比hybridGCD() 更快的东西,mpn/gcd.c 的源代码和注释可能是一个很好的资源

标签: java biginteger


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 2011-01-28
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2010-12-20
    • 2011-03-30
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多