当前位置: 代码迷 >> 综合 >> zcmu--1104: 小胖买切糕*(好像不是快速幂)
  详细解决方案

zcmu--1104: 小胖买切糕*(好像不是快速幂)

热度:58   发布时间:2023-12-26 10:04:38.0

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