1.快速幂

1.快速幂

37=?

【析】7 = 111

   31 =3

   32 =9

   34 =81

   ……

   32^(n-1)   --n:二进制位数  0~n-1

   所以37=3×9×81

【例1】https://www.acwing.com/problem/content/91/

#include <iostream>
using namespace std;
int main(){
    int a,b,p;
    cin>>a>>b>>p;
    int res = 1 % p;    //答案
    while(b){
        if(b&1) res = res * 1ll * a % p; //从b的个位开始考虑,如果b个位是1,则res*a
                            //1ll:longlong型整数1,防止溢出
                        //先对乘数因子取模再运算不影响结果,(a * b) % p = (a % p * b % p) % p
a = a * 1ll * a % p; //十位:不断平方 b >>= 1; //b右移1位,去掉个位 //6>>1就是把00000110右移一位变为00000011 } cout << res << endl; return 0; }

猜你喜欢

转载自www.cnblogs.com/kirin1105916774/p/12687214.html