文章
24
粉丝
0
获赞
254
访问
8.3k
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int qmi(LL a, LL k, int p) {
int res = 1;
a = a % p; // 最小的乘法取模的值
while (k > 0) { // 遍历k的二进制串
if (k % 2 == 1) { // 如果k的二进制最低位为1时
res = (LL)res * a % p; // [(a % p)*(a % p)...(a % p)] % p的结果累计到res里
}
a = (LL)a * a % p;
k = k >> 1;
}
return res;
}
LL bigMod(string x, int p) { // 长字符串取模转整数
int res = 0;
for(int i = 0; i < (int)x.size(); i++) {
res = (res * 10 + (x[i] - '0')) % p;
}
return res;
}
int main() {
int k, p;
string a;
while(cin >> a >> k >> p) {
int num = bigMod(a, p);
cout << qmi(num, k, p) << endl;
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发