快速幂取模(二分思想)
打了好多次比赛都用到快速幂,然而总是记得不太熟,今天写下来自己的模板
直接进行循环求幂的时间复杂度体现在for循环中,为O(b).这个算法存在着明显的问题,如果a和b过大,很容易就会溢出。
那么,我们先来看看第一个改进方案:在讲这个方案之前,要先有这样一个公式:
ab mod c = (a mod c)b mod c
废话不多说,直接粘板子
ll mod_=10000019; ll pow_(ll a,ll b) { ll ans=1; a=a%mod_; while(b) { if(b%2==1) ans=(ans*a)%mod_; b=b/2; a=(a*a)%mod_; //cout<<a<< " "<<b<<" "<<ans<<endl; } return ans; }