Kotlin中如何将BigInteger类型参数传入pow方法求幂并返回末位数字
问题解决:Kotlin中BigInteger幂运算取最后一位
报错原因
java.math.BigInteger 提供的原生pow()方法仅支持接收Int类型的指数参数,你传入BigInteger类型的指数会触发类型不匹配错误。此外就算没有类型限制,直接计算超大指数的完整幂结果也会占用巨量内存,运行效率极低,没有实际可行性。
实现思路
只需要获取幂运算结果的最后一位,等价于计算 (base ^ exponent) mod 10,可以直接使用BigInteger内置的modPow()方法完成计算:
modPow方法的指数、模数参数均支持BigInteger类型,不需要把指数转换为Int- 内部采用快速幂算法实现,无需计算完整的幂结果,超大数运算效率极高
修正后可运行代码
import java.math.BigInteger fun main(args: Array<String>) { println(lastDigit(BigInteger("1606938044258990275541962092341162602522202993782792835301376"),BigInteger("2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376"))) } fun lastDigit(base: BigInteger, exponent: BigInteger): Int { // 处理指数为0的特殊场景,非0数的0次幂结果为1 if (exponent == BigInteger.ZERO) { return 1 } // 计算 (base^exponent) mod 10,结果就是幂的最后一位 return base.modPow(exponent, BigInteger.TEN).toInt() }
你的示例中底数末位为6,任意正整数次幂的末位都是6,运行代码后输出结果为6。
内容的提问来源于stack exchange,提问作者Xlorokoptiko Gia Gkazon
相关产品推荐
相关产品推荐

