在O(nlogn)中找到(x ^ n除p)的提示

时间:2012-04-13 13:58:00

标签: algorithm time-complexity

我想在O(nlogn)中找到(x ^ n除p)的提示,n = 2 ^ k; 我写这个,但事实并非如此,你能帮助我吗?

rem(int x,int n,int p){

if (n==1)
 return x%p;
else
 return rem(x,n/2,p);
}

1 个答案:

答案 0 :(得分:3)

假设这是家庭作业,这里有一个提示:阅读exponentiation by squaring,它为您提供构建解决方案所需的一切,包括伪代码。

您当前的实现不区分n的偶数值和奇数值,仅当n是2的幂时才是正确的。您可以扩展您的解决方案以适用于所有n(见下文)。

当您获得rem(x,n/2,p)的返回值且n为偶数时,您应该将结果平方并取平方的余数。

您可以将此扩展为适用于所有n,而不仅仅是2的权限,还可以将结果乘以x,并将剩余部分用于n的奇数值