文章

24

粉丝

0

获赞

254

访问

8.3k

头像
取模运算 题解:
P5133
发布于2025年3月12日 23:33
阅读数 294

#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;
} 

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发