一道简单的幂运算题目,找不到bug,戳进来帮个忙!感谢!

对于每一组数据,输出a的b次方
结果对1,000,000,007取模
Sample Input
1 1
2 2
56 23
Sample Output
1
4
173541855

#include
#include
int APP(int a,int b,int m);
int main()
{

int a,b,m,t;
while(scanf("%d%d",&a,&b)!=EOF)
{ if(a>=b && b<=1000 && b>0)
{
m=1000000007;
t=APP(a,b,m);
printf("%d\n",t);
}

}

}

int APP(int a,int b,int m)
{ int r =1;
a%=m;
while(b>1)
{
if((b&1)==1) r=(r*a)%m;
a=(a*a)%m;
b/=2;
}
return (r*a)%m;

}

这是学校的题目,不知道为什么验证 56 23 这组数据的时候出来的结果不对,
请大神们多多指教,谢谢!

#include
#include
int APP(int a,int b,int m);
int main()
{

int a,b,m,t;
while(scanf("%d%d",&a,&b)!=EOF)
{ if(a>=b && b<=1000 && b>0)
{
m=1000000007;
t=APP(a,b,m);
printf("%d\n",t);
}

}

}

int APP(int a,int b,int m)
{ int r =1;
a%=m;
while(b>1)
{
if((b&1)==1) r=(r*a)%m;
a=(a*a)%m;
b/=2;
}
return (r*a)%m;

}

重贴一遍代码,比较好看