取幂是公钥密码学中经常使用的操作。以下哪个选项是计算 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贡献。
这个问题的测验