龟速乘

  在c++计算中我们有时也会遇到有些比较大的数相乘,a*b%p,如果a*b的值爆了longlong,那么我们就要用到龟速乘(愿意打高精的话当我没说)。

 

  8*5=8+8+8+8+8=8+16+16=8+32

  我们通过这样的方法,讲乘法转换为加法,这样就完成了。

 

  代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
  long long a,b,p;
  cin>>a>>b>>p;
  long long ans=0;
  for(;b;b>>=1)
  {
    if(b&1) ans=(ans+a)%p;
    a=a*2%p;
  }
  cout<<ans;
}

  ❀完结撒花❀

posted @ 2020-12-30 12:33  上仙  阅读(184)  评论(0编辑  收藏  举报