题目描述
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。
输入格式
三个整数b,p,k.
输出格式
输出“b^p mod k=s”
s为运算结果
输入输出样例
输入 #1
2 10 9
输出 #1
2^10 mod 9=7
#include "iostream"
#include "stdio.h"
#include "string.h"
using namespace std;
// 快速幂
long long pow(long long a,long long b)
{
long long ans=1,base=a;
while(b)
{
if(b & 1)
{
ans=ans*base;
}
base=base*base;
b = b >> 1;
}
return ans;
}
//快速幂取余
long long pow_mod(long long a,long long b,long long c)
{
long long ans = 1,base=a;
base = base % c;
//【考虑0次方的情况】
if(b==0)
{
return 1%c;// 任意a的0次幂都是1,故直接用1%c即可
}
while(b)
{
if(b & 1) // 与运算,判断奇偶性
ans = (ans*base) % c;
b = b >> 1;// 右移一位,相当于除2
base = (base * base) % c;
}
return ans;
}
int main()
{
long long a , b , c;
scanf("%lld %lld %lld" , &a , &b , &c);
printf("%lld^%lld mod %lld=%lld\n",a,b,c,pow_mod(a, b, c));
return 0;
}
//2 10 9
//2^10 mod 9=7