https://www.cnblogs.com/zjl192628928/p/9382752.html
快速幂模板:
long long Mode(long long a, long long b, long long mode)
{
long long sum = 1;
while (b) {
if (b & 1) {
sum = (sum * a) % mode;
}
b /= 2;
a = a * a % mode;
}
return sum;
}
例题
Leading and Trailing LightOJ - 1282
You are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.
Input
Input starts with an integer T (≤ 1000), denoting the number of test cases.
Each case starts with a line containing two integers: n (2 ≤ n < 231) and k (1 ≤ k ≤ 107).
Output
For each case, print the case number and the three leading digits (most significant) and three trailing digits (least significant). You can assume that the input is given such that nk contains at least six digits.
Sample Input
5
123456 1
123456 2
2 31
2 32
29 8751919
Sample Output
Case 1: 123 456
Case 2: 152 936
Case 3: 214 648
Case 4: 429 296
Case 5: 665 669
题意:求n^k的前三位和后三位数,后三位的话要前补零。
求后三位很简单,就是套上面的模板,快速幂直接求就可以了,前三位比较麻烦。
我们不妨设,len=(int)(klog10(n)),n^k=x10 ^(len-1),之后,对原式两边同时取对数,就变成了klog10(n)=log10(x10 ^(len-1),就等于klog10(n)=log10(x)+log10(10 ^len-1)=log10(x)+len-1;
所以 log10(x)=klog10(n)-len+1;
x=pow(10,1.0klog10(n) -len+1);
这两个不能消掉,因为一个是浮点型,一个是整形,
#include <algorithm>
#include <stdio.h>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
//#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
#define Max 100001
const int mod=1000;
long long qucikpower(long long x,int k)
{
long long ans=1;
while(k)
{
if(k&1)
ans = ans*x%mod;
x=x*x%mod;
k/=2;
}
return ans;
}
int main()
{
int c,n,k;
cin>>c;
for(int i=1;i<=c;i++)
{
cin>>n>>k;
int len=k*log10(n)+1;
double t=pow(10,1.0*k*log10(n)-len+1);
while(t<100)
{
t*=10;
}
int x=t;
int y=qucikpower(n,k);
printf("Case %d:",i);
printf(" %d %03d\n",x,y);
}
return 0;
}
参考博客:https://blog.csdn.net/ssimple_y/article/details/74011919