【发布时间】:2020-09-17 14:17:33
【问题描述】:
我需要一个 BigInteger modPow 的计算,但使用 BigDecimal 作为指数。
在这种情况下,无法转换为 double 或使用 BigDecimal.pow 然后 mod,因为没有 mod 的完整结果将不适合内存。 (并且 double 缺乏精度) 因此,转换为具有适当规模的 BigInteger 也是不可能的。
我没有找到图书馆或类似的图书馆。
在数学上是否有可能在不计算完整幂之前使用分数指数进行有效的 modPow?
编辑: 示例
BigInteger base = BigInteger.valueOf("101");
BigDecimal exp = BigDecimal.valueOf("24.387207613444534);
BigInteger mod = BigInteger.valueOf("10403");
BigInteger result = base.modPow(exp, mod)
这些样本数量非常少,预期用途需要更大的样本。 它应该提供一个本身太大而无法保存在 RAM 中的数字的 mod,但是 log 和整数除数是已知的。
【问题讨论】:
-
...BigInteger modPow 的计算,但使用 BigDecimal 作为指数... 这在数学上对您意味着什么?这似乎是一个XY problem。根据我能想到的最合理的定义,这涉及计算模数的 10 次根,它们甚至可能不存在。
-
您能否给出输入示例以及这些输入的预期输出?远不清楚您要问的内容在数学上是明确定义的。这是用来干嘛的? (顺便说一句,你也没有提到一种语言。Java?)举个例子,你希望
modPow(5, 3.2, 7)产生什么,为什么? -
@MarkDickinson 提供的示例。我是基于java的,但这并不重要。对于您的示例,我希望结果为 4,因为 5^3.2 = 172,... mod 7 = 4
-
所以你要扔掉小数部分?也就是说,你想要
integer_part_of(base ^ exponent) mod modulus? -
@MarkDickinson 是的。
标签: java math bigdecimal pow mod