#include<iostream.h>
//using namespace std;
int gmod(int a,int b); //这儿要加声明,大概是因为gomd在main函数后面,所以得在main函数前面声明一个吧
int main()
{
int x,y;
cout<<"请输入两个整数:"<<endl;
cin>>x>>y;
int su=gmod(x,y);
if(su==0)
cout<<x<<"和"<<y<<"不互素!"<<endl;
else
cout<<x<<"和"<<y<<"模的逆元是:"<<su<<endl;
return 0;
}
int gmod(int a,int b) //求两个整数模的逆元
{
int s0=1,s1=0,t0=0,t1=1; //对s1,s0,t1,t0进行初始化
int bb=b; //保留b的初值
if(a==1)
return 1;
if(a%b==0)
return 0; //若a,b不互素,直接返回0
int q,r,s,t; //声明辗转反除法需要用到的整数
while(b%a!=0) //直到a%b等于1才结束while
{
q=b/a;
r=b%a;
b=a;
a=r;
s=s0-q*s1;
s0=s1;
s1=s;
t=t0-q*t1;
t0=t1;
t1=t;
}
if(t>0)
return t;
else
return t+bb;
}
求两个整数模的逆元
最新推荐文章于 2022-01-14 17:39:22 发布