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;
}