首页 > 其他 > 详细

快速幂

时间:2020-06-06 22:01:24      阅读:44      评论:0      收藏:0      [点我收藏+]
#include<bits/stdc++.h>
using namespace std;
//快速求幂,就是二分法
long long mod=1000000007L;
long long pow1(int x,int y){
    //判断奇偶,偶数返回0奇数返回1
    if(y==0) return 1;
    long long q=pow1(x,y/2);//注意只调用一遍,否则On
    if(y&1) return q*q*x;
    else return q*q;
}
//带模,其实就是之前做过的,a^b mod n 的题
long long pow_mod(int x,int y,int c){
    //判断奇偶,偶数返回0奇数返回1
    if(y==0) return 1;
    long long q=pow_mod(x,y/2,c)%c;//注意只调用一遍,否则On
    if(y&1) return (q*q*x)%c;
    else return (q*q)%c;
}
//位运算的方式,改成迭代,根据二进制
int pow_mod_bit(int x,int y,int c){
    int s=1;
    while (y>0)
    {
        //末尾是1
        if(y&1){
            s=(s*x)%c;
        }
        y>>=1;
        x=(x*x)%c;
    }
    return s;
}
int main()
{
    cout<<pow1(2,33)<<endl;
    cout<<pow_mod(2,109,111)<<endl;
    cout<<pow_mod_bit(2,10,10)<<endl;
    return 0;
}

 

快速幂

原文:https://www.cnblogs.com/MorrowWind/p/13056616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!