后三位直接快速幂取模。
前三位的话,设 x = n^k 。两边取对数 log x = log n^k (整数部分)+ log n^k(小数部分)。对前三位整数部分是100。
fmod是对浮点数取模。
#include <iostream>
#include<stdio.h>
#include<cmath>
#define mod 1000
typedef long long ll;
using namespace std;
ll powmod(ll a,int n)
{
ll ret = 1;
while(n)
{
if(n&1) ret = ret*a%mod;
a = a*a%mod;
n=n>>1;
}
return ret;
}
int main()
{
int t,n,k;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&k);
printf("%d...%03lld\n",(int)pow(10, 2 + fmod(k * log10(n), 1)),powmod(n,k));
}
return 0;
}