[gdgzoi] 逆元

题目大意:已知a,m,求同余方程 ax\equiv 1\left ( mod\: m\right ) x的最小正整数解

同余的充要条件是 ax-1是m的整数倍(可以自己尝试证明),因此有ax-1=m*k,变形可得不定方程ax+my=1,显然1为gcd(a,m),那么我们可以用扩展欧几里得算法直接求出x和y的一组解

但是,题目要求最小正整数解,怎么办呢?显然我们必须先知道通解的表达式

假设对于任意一个不定方程ax+by=c我们得到了两组解(x1,y1)和(x2,y2),则有ax1+by1=ax2+by2;变形可得a(x1-x2)=b(y2-y1),两边同时除以gcd(a,b),得a'(x1-x2)=b'(y2-y1),其中a'=a/gcd(a,b),b'=b/gcd(a,b),我们不难证明,此时a'和b'互素,因此x1-x2一定为b'的整数倍,同理y2-y1一定为a'的整数倍,所以我们有不定方程的通解:

x=x0+kb\\y=y0-ka

其中x0,y0为任意一组解,

那么,到这里,只用判断一下x的符号,略作修改即可

1.  x > 0     x=x%m

2.  x = 0     x=m

3.  x < 0     x=m - (-x)%m

具体为什么大家自己推一下吧,应该很快的吧...

 

你可能感兴趣的:(数论,题解)