您的位置:首页 > 其它

线性模方程求解

2016-09-18 13:20 369 查看
对于一些数论专题总是有些晕,还是要多做题(O_O)

所谓线性模方程,就是形如ax≡b(modn) (a,x,b,n∈Z∗)的方程。。

已知a,b,需要求解最小的x值。

方法如下:

原方程等价于ax−ny=b,令d=gcd(a,n)。

如果bmodd≠0,则方程无解,因为左边是d的倍数,而右边不是。

如果<
c234
span class="mi" id="MathJax-Span-12395" style="font-family: MathJax_Math-italic;">bmodd=0,则先使用扩展欧几里得算法求出方程ax′+ny′=d的一组解,然后原方程的解x=(x′×(b÷d))modn,这里略去证明。

代码如下:

long long exgcd(long long a, long long b, long long &x, long long &y){
if(!b) {
x = 1;
y = 0;
return a;
}
long long g = exgcd(b, a%b, y, x);
y -= (a/b)*x;
return g;
}

bool liner_mode_equition(long long a, long long &x, long long b, long long n) {
long long x_, y_, d = exgcd(a, n, x_, y_);
if(b % d != 0) return false;
x = (x_ * (b / d)) % n;
return true;
}


就是这么简单(^__^)!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数论 线性模方程