每日一题|djwcb【算法赛】
djwcb
心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。
djwcb
注意:
快速幂+字符串,看数据范围幂p≤1020000,用字符串对时间复杂度最为友好。接下来倒序遍历,即我们先从幂的个位数向后面(十位、百位…)遍历,举个例子如求x456,x=[(x100)4 x (x10)5 x x6],我们先从x的6次方开始,用ans存储,再将x=x10,继续遍历。
实践代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define INF = 0x3f3f3f3f
#define PII pair<int,int>
const int N = 1e5+10;
const int mod = 1e9+7;
int qpow(int a,int b,int mod){//快速幂对mod取模
int ans=1;
while(b){
if(b&1) ans*=a%mod;
a*=a%mod;
b>>=1;
}
return ans%mod;
}
void solve(){
int x;string p;cin>>x>>p;
int ans=1;
for(int i=p.length()-1;i>=0;i--){//倒序遍历
ans=(ans*qpow(x,p[i]-'0',10))%10;
x=qpow(x,10,10)%10;//x=x^10
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
心有猛虎,细嗅蔷薇。再见了朋友~