📜  门|门 IT 2007 |问题 17

📅  最后修改于: 2021-09-26 03:47:03             🧑  作者: Mango

取幂是公钥密码学中经常使用的操作。以下哪个选项是计算 b n mod m,0≤b,n≤m 所需的乘法次数的最严格上限?
(A) O(logn)
(B) O(√n)
(C) O(n/logn)
(D) O(n)答案:(一)
解释:

这个问题可以用分而治之的范式来解决

算法 :

Binary_exp(b,n)                            // Compute bn mod m

{

    if(n == 0)

        Return 1;

    Else if(n == 1)

        Return b mod m;

    Else

    {

        Half = Binary_exp(b,n/2);

        if(n%2 == 0)                                // n is even

            Return (Half*Half) mod m;

        Else                                    // n is odd

            Return (((Half*Half) mod m)*n) mod m;

}

}          

计算上述算法的时间复杂度的递归关系为
T(n) = T(n/2) + 常数 = (log2n)

此解决方案由Pranjul Ahuja贡献。
这个问题的测验