FZU 1752 a^b%c

简介:

题目连接: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
目录
相关文章
|
2月前
|
机器学习/深度学习
PTA- 各位数字之和
各位数字之和
23 0
|
1月前
|
算法
HJ108 求最小公倍数
HJ108 求最小公倍数
15 0
|
2月前
|
C++
【PTA】L1-025 正整数A+B (C++)
【PTA】L1-025 正整数A+B (C++)
58 0
【PTA】L1-025 正整数A+B (C++)
|
5月前
hdu 1052 Tian Ji -- The Horse Racing【田忌赛马】(贪心)
hdu 1052 Tian Ji -- The Horse Racing【田忌赛马】(贪心)
26 0
|
6月前
华为机试HJ96:表示数字
华为机试HJ96:表示数字
|
6月前
华为机试HJ56:完全数计算
华为机试HJ56:完全数计算
|
算法
a^b(快速幂)
题目: 求 a 的 b 次方对 p 取模的值。 输入格式: 三个整数 a,b,p ,在同一行用空格隔开。 输出格式: 输出一个整数,表示a^b mod p的值。
61 0
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
|
Java
HDOJ(HDU) 2502 月之数(进制)
HDOJ(HDU) 2502 月之数(进制)
85 0

热门文章

最新文章