标签:inverse temp 数论 c++ int 素数 include mod
素数模的逆
又是可恶的密码学。
每天疯狂求逆,天天辗转相除法,实在是腻了。
因此有了以下代码、、
#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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。