每日一题|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;
}
心有猛虎,细嗅蔷薇。再见了朋友~