您的位置:首页 > 其它

一元线性同余方程组

2013-09-04 20:06 155 查看

定义

由若干个一元线性同余方程组构成的方程组,叫做一元线同余方程组。

求解

我们可以将其统一划成a*x ≡ b(mod m)的形式,这样有利于算法的实现。

既然是对同余方程组求解,那么必然得先会对同余方程求解,如果对同余方程求解仍有疑问,可以参考:/article/7138419.html

对于同于方程组的求解,其实质过程就是对于其中的同余方程依次进行两两合并,然后对最终合并的最终同余方程进行求解即可(如果在合并的过程中发现无解则不需要再隽星合并,因为此时该方程组已经无解)。先给出同余方程合并的推到过程,如图所示:



核心代码

long long RemainderEquationS(long long* a,long long* m,int k)
{
//数组a存储余数
//数组m存储除数
//k表示数组大小
long long a1,a2,m1,m2,d;
long long x,y;
long long t,c;
int flag;

a1 = a[0];
m1 = m[0];
flag = 1;

for(int i = 0 ; i < k; i++)
{
a2 = a[i];
m2 = m[i];
c = a2 - a1;
ExtendedEuclid(m1,m2,d,x,y);

if(c % d)
{
flag = 0;
break;
}
t = m2 / d;
x = (x * c / d %t + t) % t;//确保x为最小正数
a1 = a1 + m1 * x;
m1 = m1 / d * m2;
}

if(flag)
return a1;
else
return -1;
}


其中的 x 就是上面推到过程中的 K。

参考资料:

http://yzmduncan.iteye.com/blog/1323599/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: