次方求模
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
求a的b次方对c取余的值
/*
* http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=102
* by jtahstu on 2015/2/12 19:00
*/
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long in;
in erfen(in n,in p,in q)
{
in a=n;
in b=p;
in result=1;
while(b != 0)
{
if(b % 2 == 1)
{
result=(result * a)%q; //乘一个a,也就是i
}
a =(a*a)%q; //平方
b /= 2; //把这个数截一半
}
return result;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
in n,p,q;
in sum=0;
scanf("%lld %lld %lld",&n,&p,&q);
sum=erfen(n,p,q)%q;
printf("%lld\n",sum);
}
return 0;
}
#include<iostream>//最优程序<span id="transmark"></span>
using namespace std;
template<class IntType>
inline IntType ModPow(IntType m,IntType n,IntType p) //m的n次方模p
{
if (n==1) return m%p;
IntType tmp=ModPow(m,n>>1,p);
return (tmp*tmp%p)*((n%2?m:1)%p)%p;
}
int main()
{
int n;
long long a,b,c;
cin>>n;
while(n--)
{
cin>>a>>b>>c;
cout<<ModPow(a,b,c)<<endl;
}
}