您的位置:首页 > 其它

利用逐次平方法快速求幂

2016-04-28 23:02 260 查看
利用逐次平方法可以快速求幂,这里不局限于数的幂,但以数的幂来举例说明。

要求ak,如果直接用a连乘k次,复杂度比较大。如果把k写成如下形式:

k = u0 + 2u1 + 22u2 + … + 2rur, ui = 0 或 1.

然后制作模a的幂次表:

a1 = A0,

a2 = (a1)2 = A02 = A1,



a2r = (a2r-1)2 = Ar-12 = Ar.

于是ak = A0u0A1u1…Arur。

注意到Ai即为Ai-1的平方,这样复杂度就降为O(log(k)),即为O(r)。以下伪码是实现逐次平方法的有效代码:

[c]

b = 1;

while k is positive do

if k is odd

then b = a*b;

a = a*a;

k shift right by 1 bit;

return b;

[/c]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: