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

快速幂

时间:2017-11-25 14:17:52      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:补充   print   代码   ctime   mat   names   cstring   ace   style   

快速幂代码:

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;

int a, b, pt = 1e3; //根据实际需求设置pt
int res;
LL Pow(int x, int y){
    LL ans = 1;
    while(y != 0){
        if(y & 1){
        ans *= x % pt;    //取余防止数据过大
        }
        y >>= 1;
        x *= x % pt;
    }
    return ans;
}
int main()
{
    scanf("%d%d", &a, &b);
    res = Pow(a, b);
    printf("%d\n", res);
    return 0;
}

 

关于取余的一些补充:

有这样一个公式:  a% c = (a % c)b % c

------------------------------------------------------------------------------------------------------------------------------

引理:  (ab)b % c = [(a % c) * (b % c)] % c

证明  a % c = d => a = tc + d

    b % c = e => b = kc + e

    (ab) % c = (tc + d)(kc + e) % c

        = (tkc2 + (te + dk) + de) % c

        = de % c = [(a % c) * (b % c)] % c

即   积的取余等于取余的积的取余

由此可推广到  a% c = (a % c)b % c 也成立

快速幂

标签:补充   print   代码   ctime   mat   names   cstring   ace   style   

原文地址:http://www.cnblogs.com/ScaleCX/p/7895063.html

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