扩展欧几里得求逆元模板

1. 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。

下面的模板即用来求一组x,y的特解

2.设c是b的逆元,则有b*c≡1(mod m);

推论:(a/b)%m=(  a*(b的逆元))%m=(a%m    *    (b的逆元)%m)%m

3.同余定理:给定一个正整数m,如果两个整数a和b满足(a-b)能够
被m整除,即(a-b)/m得到一个整数,那么就称整
数a与b对模m同余,记作a≡b(mod m)。

数学表述:
(a+b)%c=(a%c+b%c)%c
(a*b)%c=(a%c*b%c)%c

除法没有上述表述,除法可转化成乘法来求,见2

下面的模板即用扩展欧几里得求逆元的模板

#include
int exgcd(int a,int b,int &x,int &y)
{
	if(!b)
	{
		x=1;
		y=0;
		return a;
	}
	int r=exgcd(b,a%b,x,y);
	int t=x;
	x=y;
	y=t-(a/b)*y;
	return r;
}  
int main()
{
	int a,b,x,y;
	scanf("%d %d",&a,&b);
	int c=exgcd(a,b,x,y);//最大公约数 
	printf("%d %d\n",c,(x+b)%b);
	return 0;
}

其中(x+b)%b即为逆元

你可能感兴趣的:(知识点笔记)