ll pow(ll a,ll b) //long long型 { ll ans=1; while(b!=0) { if(b%2==1) //if(b&1) ans=ans*a%mod;//如果是奇数次幂,因为b下面是除以2操作,会少一次乘,这里要提前乘上去。 a=a*a%mod;//快速幂,每一次是上一次的平方倍 b=b/2; } return ans; }
分析:
将指数b看成二进制,b%2==1即判断当前b二进制最低位是否为1,是则将当前底数a与累积ans相乘,否则跳过。在每次循环中都将底数a扩大一倍,将指数b缩小一半。其中mod是针对幂运算求模。
原文地址:https://www.cnblogs.com/ShadowCharle/p/10695337.html
时间: 2024-10-07 19:26:53