数论 · 求解线性同余方程
问题
求解方程
以下摘自一本通
1 求特解
定理
对于该方程,它等价于
即有整数解的充要条件就是:
求解
根据定理,我们可以先用 扩展欧几里得算法 求出一组解
然后两边同除
2 求通解
定理
若
则该方程的任意解可以表示为:
求解
按照上述定理可以求出方程的所有解。
但实际往往让我们求最小整数解,也就是:
【补】 求最小解
可以看 P1516 青蛙的约会 这道题,里面就有求最小解的部分。
详细证明看 小花的题解 有对通解、最小解公式的证明。
3 代码
用扩欧求解线性方程
inline bool linearEquation (int a, int b, int c, int &x, int &y)
{
int gcd = exgcd (a, b);
if (c % gcd) return false;
int k = c / gcd;
x *= k, y *= k;
return true;
}
——