我正在使用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.