如何使用拓展gcd算法算出ax+by=c的最小正整数解x——Looooops 题解

题目大意:

给出四个整数 $ A B C K $ 求出 m $ (A + C*n) \equiv B (mod \quad 2^K) $ 的最小整数解 $ n $ 。

解法:

这个东西我们同过一系列的化简之后可以得出一下方程:
\[ C*n +2^K * y=B-A (y<0) \]

这个方程现在被转换成了 $ ax+by = c $ 的形式,现在问题就转换成了已知 $ a=C , b = 2^K $ 求出x的最小真正数解。像这种问题就可以用拓展gcd算法来求解(拓展gcd算法可以自行百度,在这里只负责讲如何算最小正整数解)。首先这个我们先吧这个方程转换为 $ ax_0+by_0=gcd(a,b) $ 之后求出其中的一个解 $ x_0 $ 之后我们在方程两边同时乘上 $ c / gcd(a,b) $ 这样之后我们的方程就变成了 $ ax_0(c/gcd(a,b))+by_0(c/gcd(a,b)=c $ 通过观察,不难发现 $ x = x_0(c/gcd(a,b)) $ ,这样我们就求出了方程 $ ax+b*y=c $ 的
其中一组解。但是这个解不一定是满足最小真正数解这个前提的,所以我们还需要这个用一个变量 $ tmp=

猜你喜欢

转载自www.cnblogs.com/lixiao189/p/9460683.html