java – BigInteger的第N个根

我正在使用BigInteger对象.使用正常的整数或长整数,我可以使用Math.pow(数字,1 / n根)来获得第n个根.但是,这不适用于BigInteger.有没有办法可以做到这一点?

我实际上并不需要根,只是知道它是否是一个完美的力量.
我用它来判断给定的BigInteger是否是一个完美的正方形/立方体/等.

解决方法:

牛顿的方法与整数完美匹配;假设k和n均为正数,我们计算sk不超过n的最大数量s:

function iroot(k, n)
    k1 := k - 1
    s := n + 1
    u := n
    while u < s
        s := u
        u := ((u * k1) + n // (u ** k1)) // k
    return s

例如,iroot(4,624)返回4并且iroot(4,625)返回5.然后您可以执行取幂并检查结果:

function perfectPower(k, n)
    return (k ** iroot(k, n)) == n

例如,perfectPower(2,625)和perfectPower(4,625)都是正确的,但perfectPower(3,625)是假的.

我会留给你翻译成Java BigInteger.

上一篇:byte数组和BigInteger之间的相互转换


下一篇:JavaFX中的BigInteger属性是什么?