取余运算(蒙哥马利)
#include<bits/stdc++.h>
using namespace std;
int b ,p ,k;
//蒙哥马利取模运算 求 a^b mod c
int Montgomery(int a, int b, int c){
int ans = 1;
a = a % c;
while(b > 0)
{
if(b & 1) ans = (ans * a) % c;
b >>= 1;
a = (a*a) % c;
}
return ans;
}
int main(){
scanf("%d%d%d", &b, &p, &k);
printf("%d^%d mod %d=%d",
b, p, k, Montgomery(b, p, k));
return 0;
}

浙公网安备 33010602011771号