俊介三

一天更新一点,一天积累一点

导航

快速幂

Posted on 2013-03-21 23:04  俊介三在前进  阅读(103)  评论(0)    收藏  举报

刚刚参加了腾讯2013马拉松,第二题(a^b)%c越界还是超时吧~桑不起。最后做了3/5~~
第三题见提交的和过的都好少,直接无视。现在总结总结第二题快速幂的知识吧,当时不知道。。

题目:求(m^n)%k 其中m,n的上限都是10^9,而c的值为10^9+7

解答:

//整数的快速幂 m^n  % k 的快速幂: 
 __int64  quickpow(__int64   m , __int64   n , __int64   k){ 
    __int64   ans = 1; 
    while(n){ 
        if(n&1)//如果n是奇数 
            ans = (ans * m) % k; 
        n = n >> 1;//位运算“右移1类似除1” 
        m = (m * m) % k; 
    } 
    return ans; 
} 

注意:m^n%k = ((m%k)^n)%k