快速幂

快速幂
这个先上Code吧

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的我们就累计答案让
一般题目是要取膜的因为指数级别增长数会非常大

没了,讲完了
谢谢收看,祝身体健康!

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务