文章
1
粉丝
60
获赞
4
访问
585
#include <iostream>
#include <string>
using namespace std;
// 快速幂取模原理
// 首先,快速幂取模得以实现,基础是 (a * b) % c = ((a % c) * (b % c)) % c,此处不再证明这条式子。
int pow_mod(int x, int y,int mod) {
int ans = 1;
x = x % mod;
while(y > 0) {
if(y & 1) {
ans = (ans * x) % mod;// 原理在上面
}
x = (x * x) % mod;
y >>= 1;
}
return ans;
}
// 计算字符串表示的大整数对模数Z取模的结果
int mod_string(const string &numStr, int Z) {
int result = 0;
int base = 1; // 用于计算每一位的权重
// 从字符串的末尾开始遍历,因为大整数的最低位存储在字符串的开始位置
for (int i = numStr.size() - 1; i >= 0; --i) {
// 将当前位的数字加到结果中,并考虑前一位的进位
result = (result + (numStr[i] - '0') * base) % Z;
// 更新权重为下一个更高的位
base = (base * 10) % Z;
}
return result;
}
// 一句话,模运算在加法和乘法运算具有封闭性
int main() {
string x;
int y,z;
while(cin >> x >> y >> z){
int x1 = mod_string(x,z);
cout << pow_mod(x1,y,z) << endl;
}
}
登录后发布评论
暂无评论,来抢沙发