题意 :
求 n 的 k 次方的 前 3位数 和 后三位数;
后三位直接 快速幂去摸;
前三位:( n^ k / 10^ ? )
可以 直接 Lg(n) * k - int (Lg(n) * k )
得出的是 N ^ K的除 10 ^ y后的小数 对 10 取对数的结果 ans;
这时候反过来 pow (10, ans ) 得到这个数
再 * 100 解决了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<cmath>
#define lson l , m, rt << 1
#define rson m+1, r, rt << 1|1
#define INF 0x7fffffff
const int maxn = 1e6 + 131;
const int MOD = 10000007;
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
LL PowMod(LL a, LL b, LL mod)
{
LL ret = 1;
while(b) {
if(b & 1) ret = ret * a % mod;
a = a *a % mod;
b >>= 1;
}
return ret;
}
LL Pow2(LL a , LL b) {
double s = log10(double(a)) * b - int(log10(double(a)) * b);
s = pow(10,s);
return s * 100;
}
int main() {
int T;
scanf("%d",&T);
for(int kase = 1; kase <= T; kase++) {
LL n,k;
scanf("%lld%lld",&n,&k);
LL x1 = Pow2(n,k);
LL x2 = PowMod(n,k,1000);
printf("Case %d: %03lld %03lld\n",kase,x1,x2);
}
return 0;
}