题目链接:https://cn.vjudge.net/problem/UVA-11029
题意:求的前三位数字和后三位数字中间用...连接。
思路:后 位直接快速幂取余就行了,主要是前三位,我们定义,两边同时取对数,,根据公式, ,可以得到,这个数很大,显然不能直接计算,我们定义 为 的小数部分,b为 的整数部分,则。所以,显然 的前几位数肯定是由 决定的,这是一个介于之间的小数,所以, 的前 位数就为。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 1000;
ll n, k;
ll qpow(ll a, ll b)
{
a %= mod;
ll ans = 1;
while(b)
{
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
int main()
{
int T; scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&n, &k);
ll ed = qpow(n, k);
double a = k * log10(n);
double b = a - floor(a);
ll be = pow(10, b) * 100;
printf("%lld...%03lld\n",be, ed);
}
}