a^b(取余运算)

##题目大意:
求出a^b mod p

##解题思路:
快速幂
1≤a,b,p≤10 9 ^9 9
数据范围是真的大,不过我们可以发现每次运算都mod p答案是不变的所以用long long就可以AC

##源程序:

#include
using namespace std;
int a,b,p;
long long calc(int x)
{
	if(x==1)return a%p;
	if(x==0)return 1%p;
	long long mid=x/2,t=calc(mid),ans=0;
	ans=(t*t)%p;
	if(x%2!=0)ans=(ans*a)%p;
	return ans;
}
void work()
{
	long long ans=calc(b);
	printf("%lld",ans);
}
int main()
{
	scanf("%d%d%d",&a,&b,&p);
	printf("%d^%d mod %d=",a,b,p);
	work();
	return 0;
}

你可能感兴趣的:(数论)