使用BigInteger Java进行智能模块化乘法

时间:2013-12-02 06:59:31

标签: java math biginteger modular-arithmetic

我需要计算两个BigIntegers的产品,将BigIntegers模块化为一个素数。

我正在计算 - y ^ r * r ^ s(mod p)。

我正在使用的代码有效,但我不禁觉得它正在执行不必要的计算,当涉及大型BigIntegers时,这些计算非常昂贵。

BigInteger v1A = y.modPow(r, p);
BigInteger v1B = r.modPow(s, p);
BigInteger v1 = v1A.multiply(v1B).mod(p);

理想情况下,我想要一次性计算v1。这可能吗?

1 个答案:

答案 0 :(得分:1)

假设你使用的方法是有效的,我没有看到更快的方法来做到这一点,但我不是专家。当然,您可以将代码合并到:

BigInteger v1 = (y.modPow(r,p)).multiply(r.modPow(s,p)).mod(p)

但这与您的代码完全相同。