首页 > 其他 > 详细

快速幂运算

时间:2018-10-12 22:02:32      阅读:178      评论:0      收藏:0      [点我收藏+]

转载自(https://www.cnblogs.com/lca1826/p/6748372.html)

由于是二进制,很自然地想到用位运算这个强大的工具: & 和 >> ,&运算通常用于二进制取位操作,例如一个数 & 1 的结果就是取二进制的最末位。还可以判断奇偶x&1==0为偶,x&1==1为奇。>>运算比较单纯,二进制去掉最后一位

其中要理解base=base这一步,看:::basebase==base^2,下一步再乘,就是base^2base^2==base^4,然后同理 base^4 base4 = base^8 ,,,,, see?是不是做到了base-->base^2-->base^4-->base^8-->base^16-->base^32.......指数正是 2^i 啊,再看上面的例子,a11 = a^(2^0) * a^(2^1) * a^(2^3),这三项是不是完美解决了,,嗯,快速幂就是这样。

自己敲了一遍

#include <iostream>
using namespace std;
long long qpow(int a,int b)
{
    long long ans=1,base=a;
    while(b!=0)
    {
        if(b&1!=0)
        ans*=base;
        base*=base;
        b>>=1;
    }
    return ans;
}
main()
{
    int n,t;
    while(cin>>n>>t)
    cout<<qpow(n,t)<<endl;
} 

快速幂运算

原文:https://www.cnblogs.com/baccano-acmer/p/9780825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!