ACM,该如何解决

ACM
上初中的时候我们就学会了幂乘运算,可是我们却不知道对于高阶的幂乘,出结果的方法比较慢,那么你有什么更好的方法吗?



Input

第1行,一个整数N(1<=N<=1000),表示要计算的数据组数
第2-N+1行,每行两个整数,第1个是x(1<=x<=100),表示底数,第2个是y(0<=y<=10000000),表示指数。



Output

对于每一组输入的数据给出幂乘的结果x^y(x的y次方),由于结果可能非常大,要求对99991取余。



Sample Input



Original

Transformed


3
2 3
5 10
3 0



 Sample Output



Original

Transformed


8
66498
1




 程序如下
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
long int n,s,i,j,p,q,m[1000];
cin>>n;
for(i=0;i<n;i++)
{
cin>>p>>q;
if(p>=1&&p<=100&&q>=0&&q<=10000000)
{
s=pow(p,q);

s=s%99991;
m[i]=s;
}
}
for(i=0;i<n-1;i++)

cout<<m[i]<<endl;
cout<<m[n-1];
return 0;
}


为什么是wrong answer
C++

------解决方案--------------------
损失精度
double能表示的一些数 int存储不了
------解决方案--------------------
在这里不能用POW(),整数运算不用POW,直接进行Y次乘法,为防止溢出,每乘一次都和99991比一下,大的时侯先MOD一下,再乘