乘法逆元(密碼學)
阿新 • • 發佈:2019-02-08
#include <iostream> using namespace std; int gcd(int x,int y);//最大公約數函式 int ectgcd(int c,int d);//乘法逆元函式 int main() { int a,b,g; cin>>a>>b; if(gcd(a,b)!=1) { cout<<"兩數之間不存在乘法逆元"<<endl; } else { g=ectgcd(a,b); cout<<"乘法逆元是:"<<g; } return 0; } int gcd(int x,int y) { int m; while(y!=0) { m=x%y; x=y; y=m; } return (x); } int ectgcd(int c,int d) { int r0,r1,y,s,t,s0,s1,t0,t1,q,r; r0=d; r1=c%d; if(r1==1) { y=1; } else { s0=1; s1=0; t0=0; t1=1; while(r0%r1!=0) { q=r0/r1; r=r0%r1; r0=r1; r1=r; s=s0-q*s1; s0=s1; s1=s; t=t0-q*t1; t0=t1; t1=t; if(r==1) { if(t>0) { y=t; } else if(t<0) { y=t+d; } } } } return y; }