题意:
求n^k的前三位和后三位
思路:
后三位快速幂,注意补0
前三位的话…
讲n^k=10^t=10^(t1+t2)
t1是t的整数部分,很明显,len(10^t1)=len(n^k)
t2是t的小数部分,就是我们需要的数
将t2*100就行了
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long LL;
const int maxn = 100005;
const int inf=(1<<28)-1;
LL quick_mod(LL a,LL b,LL mod)
{
LL res=1,tmp=a;
while(b)
{
if(b&1) res=(res*tmp)%mod;
b/=2;
tmp=(tmp*tmp)%mod;
}
return res;
}
int main()
{
int T,Case=0;
scanf("%d",&T);
while(T--)
{
LL n,k;
scanf("%lld%lld",&n,&k);
double t=k*log10(n)-(LL)(k*log10(n));
t=pow(10,t);
t*=100;
LL Ans1=(LL)t;
printf("Case %d: %lld %03lld\n",++Case,Ans1,quick_mod(n,k,1000));
}
return 0;
}