题目链接
题意:求n的k次方的前三位和后三位
后三位%1000不够三位往前补0
前三位设x是nk用科学计数法表示的小数部分
——>nk=x* 10y
klog10(n)=log10(x)+y
x=10k*log10(n)-(int)(k*log(n))
再将x100就是我们要求的前三位
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll quickmod(ll a,ll p,ll mod=1000)
{
int ans=1;
while(p)
{
if(p&1)
ans=(ans*a)%mod;
p>>=1;
a=(a*a)%mod;
}
if(ans<0)
ans=(ans+mod)%mod;
return ans;
}
int main()
{
int t;
ll n,k;
scanf("%d",&t);
for(int cas=1; cas<=t; cas++)
{
scanf("%lld%lld",&n,&k);
double kk=k*log10(n);
ll ans1=100*pow(10.0,kk-(int)kk);
ll ans2=quickmod(n,k);
printf("Case %d: %lld ",cas,ans1);
if(ans2<10)
printf("00%lld\n",ans2);
else if(ans2<100)
printf("0%lld\n",ans2);
else
printf("%lld\n",ans2);
}
return 0;
}