快速幂

快速幂取模(二分思想)

   打了好多次比赛都用到快速幂,然而总是记得不太熟,今天写下来自己的模板

  

  

直接进行循环求幂的时间复杂度体现在for循环中,为O(b.这个算法存在着明显的问题,如果a和b过大,很容易就会溢出。

那么,我们先来看看第一个改进方案:在讲这个方案之前,要先有这样一个公式:

amod 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;
}

 

 

 

posted @ 2019-02-01 10:47  阿斯水生产线  阅读(199)  评论(0编辑  收藏  举报