码迷,mamicode.com
首页 > 其他好文 > 详细

1.快速幂

时间:2020-04-12 20:44:59      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:using   class   pre   turn   wing   开始   inf   stream   ace   

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

 

1.快速幂

标签:using   class   pre   turn   wing   开始   inf   stream   ace   

原文地址:https://www.cnblogs.com/kirin1105916774/p/12687214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!