龟速乘

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

  ❀完结撒花❀

原文地址:https://www.cnblogs.com/fuhuayongyuandeshen/p/14210853.html