算法(一)

快速计算整数x的n次幂

     

当n&(1<<i)==1时,ai=1;当n&(1<<i)==0时,ai=0。设乘法中每一项为m(i)^ai,则m(i)每一项为前一项的平方,首项为x,即m(i+1)=m(i)^2,m(0)=x。则x^n为ai为1时m(i)的值的乘积。

代码如下:

#include <bits/stdc++.h>
using namespace std;
long long QP(long long x,long long n)
{
    long long z=1;
    while(n)
    {
        if(n&1)
        {
            z*=x;
        }
        x*=x;
        n=n>>1;
    }
    return z;
}
int main()
{
    long long x,n;
    cin>>x>>n;
    cout<<QP(x,n)<<endl;
    return 0;
}

 

posted @ 2020-04-30 23:03  !!_!!  阅读(204)  评论(0)    收藏  举报