题目链接
第一次wrong了一个点,看来测试样例,补上了:
当输入是
1 0 1的时候,
不加if(p0) return 1%k;就会输出1;显然正确答案是0
做题时要对数据的范围考虑全面,特殊处理这些数据
在这道题中体现出来的特殊数据
p的范围时0到“无穷”
k的范围时1到”无穷“
1,while(p),当 p0 时,while循环显然进不去
2,任何数取余1都等于0.
#include<stdio.h>
long long ksm(long long b,long long p,long long k)
{
long long ans=1,r=b;
if(p==0) return 1%k;
while(p)
{
if(p%2==1) ans=(ans*r)%k;
r=(r*r)%k;
p/=2;
}
return ans;
}
int main()
{
long long b,p,k,temp;
scanf("%lld%lld%lld",&b,&p,&k);
temp=ksm(b,p,k);
printf("%lld^%lld mod %lld=%lld",b,p,k,temp);
return 0;
}