Loading

快速幂

problem:

计算

a^b的值

啊哈哈,这不有手就行么,简单入门红题,跑个循环不就出来了嘛——土蛋

可数据毒瘤小k,给出了下面一个数据

\(a = 2^{31}\) , b = \(2^{31}\)

土蛋疯了,于是去加工修炼,终于练就快速幂本领,击败了了毒瘤小k

快速幂

思路:

举个例子:

\(2^{15}\)

step1.ans = \(15\)\(2\) 相乘.
step2.ans = \(7\)\(4\) 相乘再乘上一个 \(2\).
step3.ans = \(3\)\(16\) 相乘再乘上 \(2*4\).
step4.ans = \(1\)\(256\) 乘上 \(2*4*16\).

从以上的步骤中不难看出,当我们求一个数的n次幂的时候,我们可以将它的两两进行配对相乘,
如果有多出来的一个数,则将它乘到答案中,否则继续配对,直到只剩下一个数为止。
有一个小的注意事项,对答案进行初始化时,初始值应为1而不是0.

结合代码更加理解

int power(int a,int b){ 
    int ans = 1;
    while(b > 0){
       if(b % 2 == 1)
       ans = (ans * a) % mod;
       a = (a * a) % mod;
       b = b >> 1;
      }
	return ans;
}
posted @ 2020-12-13 17:13  Dita  阅读(78)  评论(0编辑  收藏  举报