当前位置: 代码迷 >> C语言 >> 关于大数取模
  详细解决方案

关于大数取模

热度:205   发布时间:2008-03-14 18:36:36.0
关于大数取模
输入一个数a,求他的n(n是一个相当大的数字)次方,然后对另一个数m取模,这个算法如何优化,我觉得可以用
for(i=1,j=1;i<=n;i++)
{ j=j*a%m;
}
缩短程序时间,但是好像还是不够省时,我觉得关键在于成的n次方,有什么办法可以优化这一步骤吗?请各位大虾解答,谢谢。我很想知道。
搜索更多相关的解决方案: 大数  

----------------解决方案--------------------------------------------------------
procedure(int a , int n[k-1....0] , int m) /* n[k-1....0] 数组n[]存储指数n的二进制数 */
int x := 1
power := a mod m
for i := 0 to k - 1 ;
begin
     if a[i] == 1 then x := (x * power) mod m
     power := (power * power) mod m
end
return x
复杂度O(logN)
----------------解决方案--------------------------------------------------------
  相关解决方案