题目描述
给你三个整数 a,b,p,求 a^b mod p。
输入格式
输入只有一行三个整数,分别代表 a,b,p。
输出格式
输出一行一个字符串 `a^b mod p=s`,其中 a,b,p 分别为题目给定的值, s 为运算结果。
样例 #1
样例输入 #1
2 10 9
样例输出 #1
2^10 mod 9=7
提示
样例解释
2^{10} = 1024,1024 mod 9 = 7。
**数据规模与约定**
对于 100% 的数据,保证 0<= a,b < 2^31,a+b>0,2 <= p < 2^31。
代码:
#include <iostream>
using namespace std;
typedef long long ll;
ll ans = 1;
ll kuaisu(ll x, ll y, ll z)
{
while (y > 0)
{
if (y % 2 != 0)//如果y为奇数
{
ans = ans * x % z;//为奇数时,先将一个数乘入ans,每一步都进行取模操作
}
//这两步与偶数时重合,所以不另外判断偶数时的情况
x = x * x % z;//偶数时,将底数平方
y /= 2;//指数除以2
}
ans %= z;//最后答案再取模
return ans;
}
int main()
{
ll a, b, p;
cin >> a >> b >> p;
ll sum = kuaisu(a, b, p);
printf("%d^%d mod %d=%d", a, b, p, sum);
}