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

FZU 1752 a^b%c

时间:2015-08-03 19:16:57      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:快速幂

题目连接:http://acm.fzu.edu.cn/problem.php?pid=1752
解题思路:要用快速幂,但不是单纯的用,如果单纯的用的话就会爆掉,要把乘法转化为加法,然后再用而且尽量用位运算。。。
上代码:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
LL multi(LL a, LL b, LL c)
{
    LL ans=0;
    a=a%c;
    while(b)
    {
        if(b&1)
        {
            ans+=a;//ans=(ans+a)%c;
            if(ans>=c)
            ans-=c;
        }

        a<<=1;//a=(a+a)%c;
        if(a>=c)
        a-=c;
        b>>=1;
    }
    return ans;
}
LL quick(LL a, LL b, LL c)
{
    LL ans=1;
    while(b)
    {
        if(b&1)
        ans=multi(ans, a, c);
        a=multi(a, a, c);
        b>>=1;
    }
    return ans;
}
int main()
{
     LL n,m,mod;
     while(~scanf("%I64d%I64d%I64d",&n,&m,&mod))
     {
        printf("%I64d\n", quick(n, m, mod));
     }
    return 0;
}
//100000000000000000

版权声明:本文为博主原创文章,未经博主允许不得转载。

FZU 1752 a^b%c

标签:快速幂

原文地址:http://blog.csdn.net/qingshui23/article/details/47258941

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