乘法逆元(密码学)

来源:互联网 发布:机械绘图软件 编辑:程序博客网 时间:2024/05/20 19:47
#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;}

0 0
原创粉丝点击