快速幂
这个先上Code吧spa
int power(int x, int y) { int sum = 1; while(y) { if(y & 1) sum *= x; x *= x; y >>= 1; } return sum; }
众所周知\(p^a * p^b=p^{a+b}\)
咱们如今须要求\(x^y\)
举个栗子,咱们求\(3^5\)
咱们把\(5\)拆成二进制\(101\)
能够发现正正好的在二进制下的位数只要是\(1\)的乘起来就是答案
emmmm,可能我说的不是特别的严密
就是\(3^5=3^{1*2^0+0*2^1+1*2^2}\)
把有\(0\)的一项直接去掉
\(3^5=3^{1*2^0+1*2^2}\)
也就是\(3^{2^0} * 3^{2^2}\)
\(3\)每次自乘能够获得\(3^1,3^2,3^4,3^8......\)
因此求3的几回方是几就不是问题了
只要是在二进制下是1的咱们就累计答案让
通常题目是要取膜的由于指数级别增加数会很是大code
没了,讲完了
谢谢收看,祝身体健康!class