线性同余方程
定义
形如
的方程称为 线性同余方程(Linear Congruence Equation)。其中,
用逆元求解
首先考虑简单的情况,当
此时可以计算
证明
接下来考虑
设
当
如果
其中
很明显,
总之,线性同余方程的 解的数量 等于
用扩展欧几里得算法求解
根据以下两个定理,可以求出线性同余方程
定理 1:线性同余方程
其中
应用扩展欧几里德算法可以求解该线性不定方程。根据定理 1,对于线性不定方程
于是找到方程的一个解。
定理 2:若
并且对任意整数
根据定理 2,可以从已求出的一个解,求出方程的所有解。实际问题中,往往要求出一个最小整数解,也就是一个特解
其中有
如果仔细考虑,用扩展欧几里得算法求解与用逆元求解,两种方法是等价的。
实现
代码实现
int ex_gcd(int a, int b, int& x, int& y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
int d = ex_gcd(b, a % b, x, y);
int temp = x;
x = y;
y = temp - a / b * y;
return d;
}
bool liEu(int a, int b, int c, int& x, int& y) {
int d = ex_gcd(a, b, x, y);
if (c % d != 0) return false;
int k = c / d;
x *= k;
y *= k;
return true;
}
本页面主要译自博文 Модульное линейное уравнение первого порядка 与其英文翻译版 Linear Congruence Equation。其中俄文版版权协议为 Public Domain + Leave a Link;英文版版权协议为 CC-BY-SA 4.0。
习题
创建日期: 2018年7月11日