求两个整数模的逆元

#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;
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值