问题描述
给定 2 个正整数 x,p,你需要输出 x的p次方mod10 的结果。
输入格式
第一行输入一个正整数 T(1≤T≤1000)T(1≤T≤1000),表示测试数据组数
对于每组测试数据:
输入一行,包含两个正整数 x,p(1≤x≤103,1≤p≤10200000)x,p(1≤x≤103,1≤p≤10200000次方)。
数据保证 1≤∑i=1Tlog10pi≤2×1051≤∑i=1Tlog10pi≤2×105。换句话说,便是保证所有数据指数之和在 1∼2×1051∼2×105。
输出格式
对于每组测试数据:
输出一个非负整数,表示 xp mod 10xpmod10 的结果。
#include <iostream>
using namespace std;
#define int long long
int qmi(int a,int b,int p)
{
int res = 1;
while(b)
{
if(b&1)res = res * a % p;
b >>= 1;
a = a * a % p;
}
return res;
}
signed main()
{
int T;
cin>>T;
while(T--)
{
int ans = 1;
int x;
string p;
cin>>x>>p;
for(int i = p.size()-1;i>=0;i--)
{
ans = ans * qmi(x,p[i]-'0',10) % 10;
x = qmi(x,10,10) % 10;
}
cout<<ans<<endl;
}
return 0;
}
1