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

快速幂取模

时间:2018-07-06 01:28:29      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:nbsp   ios   部分   直接   结果   pac   std   col   次方   

对于一个幂,分为底数部分和指数部分,我们将指数部分写成二进制的形式。

比如说2的5次方,我们将5写成101,接下来我们从后往前看101的每一位二进制数是0还是1

如果是0,那么就直接让子结果自身平方即可,如果是1,就要让最终结果乘上当前的子结果,然后再将子结果自身进行平方。

子结果自身进行平方是一直进行的,但是只有当当前走到二进制中是1的地方的时候才进行与结果的乘积。

最终结果可能很大,经常进行取模要不存不下。

#include<iostream>
using namespace std;
int a,b,c;
long long ans=1,y;
int main()
{
    cin>>a>>b>>c;
    y=a;
    while(b!=0)
    {
        if(b%2==1)
            ans=ans*y%c;
        y=y*y%c;
        b/=2;
    }
    cout<<ans;
    return 0;
}

 

快速幂取模

标签:nbsp   ios   部分   直接   结果   pac   std   col   次方   

原文地址:https://www.cnblogs.com/aininot260/p/9270821.html

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