详细讲解【快速幂】

快速幂(qpow)

注:替代pow函数,pow函数是浮点型时候才用的 如果用在int或其他上可能会错误,qpow(快速幂)不仅运算快而且更精确!

 

代码:

#include
typedef long long int ll;  
ll qpow(ll a,ll b,ll q)        //代码是传了三个变量 最后q为mod
{
    ll ans; 
    ans=1;                    //ans表示要输出的结果
    while(b){
        if(b%2){             //解决如果幂数b为奇数时 例如:5^7 将其转换成5*5^6
            ans=ans*a%q;
        }                      //整个循环要放在while里面进行多次计算
        a=a*a%q;
        b/=2;
    }
    return ans;
}
int main()
{
    ll a,b,q;
    scanf("%lld%lld%lld",&a,&b,&q);
    ll ans=qpow(a,b,q);
    printf("%lld\n",ans%q);       //求幂数最后再取下余 不取也行 但……
    return 0;
}

 

你可能感兴趣的:(ACM-ICPC)