Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 1517 Solved: 316
[Submit][Status][Web Board]
Description
今天,小胖出门买切糕,大家都知道,切糕是密度是相当的大,所以切糕的质量要用指数来计算。买买提(切糕商)说:买多少,切多少。结果变成切多少,买多少。由于小胖的气场,买买提最终决定,把一块质量为a^b的切糕,分为c块,多余出来质量为d的卖给小胖,求小胖需要买多少切糕。
Input
输入数据有多组,每组占一行,由三个整数a,b,c,当a=0,b=0,c=0时,表示输入结束,该行不做处理。0<a,c<1000 0=<b<1000
Output
很简单,你只要求出d的值
Sample Input
3 2 3
4 3 3
0 0 0
Sample Output
0
1
【分析】因为是1000,所以肯定会溢出,所以不能用一般方法。但是我套了快速幂的模板,段错误。不知道为什么。。。
RE代码:
#include<iostream>
#include<cstdio>
using namespace std;
int quickPow(int a,int b,int c)
{
if(b==1)return a;
if(b%2==0)
{
int t=quickPow(a,b/2,c);
return t*t%c;
}
else{
int t=quickPow(a,b/2,c);
t=t*t%c;
t=t*a%c;
return t;
}
}
int main()
{
int a,b,c;
while(~scanf("%d%d%d",&a,&b,&c))
{
if(a==0&&b==0&&c==0)break;
cout<<quickPow(a,b,c)<<endl;
}
return 0;
}
快速幂模板:
/*快速幂模板*/
int quickPow(int a,int b,int n)
{
if(b==1)return a;
if(b%2==0) //偶数
{
int t=quickPow(a,b/2,n);
return t*t%n;
}
else{ //奇数
int t=quickPow(a,b/2,n);
t=t*t%n;
t=t*a%n;
return t;
}
}
【AC代码】
然后,用了常规思路,就A了。感觉很奇怪。希望能有大佬解答。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int a,b,c,x;
while(~scanf("%d%d%d",&a,&b,&c))
{
if(a==0&&b==0&&c==0)break;
x=a%c;
for(int i=1;i<b;i++)
x=(x*a)%c;
cout<<x<<endl;
}
return 0;
}