CTX学长的快速幂
什么?听说你会快速幂?这么厉害的吗,那我就出一道快速幂的水题吧!
题意很简单,给你n,m的值,我想知道n的m次方是多少,但是这个答案太大了,所以你只需要输出答案最后面的十位数字即可。
输入:
T组输入,接下来的T行(T<300),每一行输入n,m(0<n<=100,0<=m<=1000000000)
输出:
输出T行,每一行输出n^m的后十位数字(不够10位用零补)。
样例输入:
3
2 10
3 3
1 1000000000
样例输出:
0000001024
0000000027
什么?听说你会快速幂?这么厉害的吗,那我就出一道快速幂的水题吧!
题意很简单,给你n,m的值,我想知道n的m次方是多少,但是这个答案太大了,所以你只需要输出答案最后面的十位数字即可。
输入:
T组输入,接下来的T行(T<300),每一行输入n,m(0<n<=100,0<=m<=1000000000)
输出:
输出T行,每一行输出n^m的后十位数字(不够10位用零补)。
样例输入:
3
2 10
3 3
1 1000000000
样例输出:
0000001024
0000000027
0000000001
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<queue>
#include<iomanip>
//#include<bits/stdc++.h>
#define eps 1e-6
//#define inf 0x7f
const long long mod=1e10;
using namespace std;
long long aa(long long a,long long b)
{
long long t=0,p;
while(b)
{
t=(t+(b%10)*a)%mod;
a=(a*10)%mod;
b=b/10;
}
return t%mod;
}
long long bb(long long n,long long m)
{
long long b=1;
while(m)
{
if(m&1)
b=aa(b,n)%mod;
m=m/2;
n=aa(n,n)%mod;
}
return b%mod;
}
int main()
{
int t;
long long n,m;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
printf("%010lld\n",bb(n,m));
}
}