数论——素数模的逆(c/c++实现)
作者:互联网
素数模的逆
又是可恶的密码学。
每天疯狂求逆,天天辗转相除法,实在是腻了。
因此有了以下代码、、
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
using namespace std;
int inverse(int x, int mod){
// 计算x模mod的逆 要求模数为素数 使用费马小定理
if(x>mod)
x %= mod;
int i(1),j(0);
map<int,int> temp;
while(i!=mod-2){
temp[i+j] = (int)pow(x,i+j);
temp[i+j]%= mod;
i += j;
if(2*i > mod-2){
for(j=1;j<=i;j*=2)
if(i+j > mod-2){
j /= 2;
break;
}
}
else{
i *= 2; j = 0;
}
}
return temp[mod-2];
}
int main(){
int x = 2;
int mod = 19;
printf("%d\n",inverse(x,mod));
}
标签:inverse,temp,数论,c++,int,素数,include,mod 来源: https://www.cnblogs.com/ymj68520/p/16220789.html