【发布时间】:2016-12-14 08:23:49
【问题描述】:
我正在尝试了解 Java 的 BigInteger 类的 modPow 和 modInverse 的行为,因为它们不能像我预期的那样工作。也许我遗漏了一些简单的东西,所以这里有一段非常简单的代码:
BigInteger a = BigInteger.valueOf(2);
BigInteger b = BigInteger.valueOf(5);
BigInteger n1 = new BigInteger(32, 100, new SecureRandom());
System.out.println("n = " + n1);
System.out.println("a^b = " + a.modPow(b, n1) + " ;; (a^b)^(b^-1) = " + a.modPow(b, n1).modPow(b.modInverse(n1), n1));
我得到的输出是:
n = 2664021049 (This is a random prime, can change each run)
a^b = 32 ;; (a^b)^(b^-1) = 4
现在,我希望最后一行的4 是2,因为它是(a^b)^(1/b) = a^(b*(1/b)) = a
这也应该在模域中工作吗?
我做错了什么?
【问题讨论】:
-
(a^b)^(1/b) = a^(b*(1/b))- 这不适用于模逆。 -
那么有没有另一种方法可以给出
(a^b)和b我找到a?
标签: java biginteger modulo