求后三位很简单,就是在快速幂的过程中模1000即可。
求前三位比较复杂:

b对应下方代码的y。
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
ll a,b;
int T;
ll ksm(ll a,ll b){
ll res = 1;
while(b){
if(b&1) res = res*a%1000;
a = a*a%1000;
b>>=1;
}
return res;
}
int main(){
cin>>T;
int kase = 0;
while(T--){
scanf("%lld %lld",&a,&b);
ll trail = ksm(a,b);
double y = fmod(b*log10(a),1); //取出次方的小数部分
ll head = (ll)(pow(10,y)*100);//计算后,往右移动2位
printf("Case %d: %03lld %03lld\n",++kase,head,trail);
}
return 0;
}
这篇博客介绍了如何使用快速幂算法求解一个数的幂的后三位,并详细解析了如何复杂操作来获取次方的前三位。通过C++代码展示了计算过程,涉及数学和算法的知识,包括模运算、次方小数部分提取以及 pow 函数的应用。

被折叠的 条评论
为什么被折叠?



