我们如何用大除数和指数计算模运算?

时间:2014-02-27 18:59:00

标签: math modular-arithmetic

示例:

(30000000 ^ 30000000)mod 40000000 =?

我一直在使用欧拉理论和指数属性,但仍然无法得到答案 任何人都知道如何通过理论和简单的计算器来计算它?

我的试验是通过费马的小定理减少30000000的指数,但指数仍然太大,无法计算计算器。

2 个答案:

答案 0 :(得分:0)

# b^e (mod m)
function powerMod(b, e, m)
    x := 1
    while e > 0
        if e % 2 == 1
            x := (b * x) % m
        b := (b * b) % m
        e := floor(e / 2)
    return x

答案 1 :(得分:0)

使用对分和平方法进行功率计算,并在每个步骤中减少中间结果以给定除数为模。

您还可以使用负余数来获得更小的中间结果。

另请注意,n = 40000000 = 4 * 10 ^ 7 = 2 ^ 9 * 5 ^ 7是一个复合数,因此Euler totient函数给出phi(n)= 2 ^ 8 * 4 * 5 ^ 6 = 16 * 10 ^ 5 = 160000。现在首先减小指数mod phi(n)-1。

这最后一种方法只有在你知道除数的分解时才有效。