码迷,mamicode.com
首页 > 其他好文 > 详细

解同余式ax ≡ c(mod m)

时间:2014-07-21 00:35:53      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   

 

将式子变形为

ax-c=my

可以看出原式有解当且仅当线性方程ax-my=c有解

设g = gcd(a, m)

则所有形如ax-my的数都是g的倍数

因此如果g不整除c则原方程无解。

 

下面假设g整除c:

利用扩展欧几里得算法解出 au + mv =g 一个特解(u0, v0)

所以可用整数c/g乘上上式

au0*(c/g) + mv0*(c/g) = c

得到原式的解x0 = u0*(c/g)

 

解的个数:

假设x1是ax ≡ c(mod m)的其他解

ax1 ≡ ax2(mod m),所以m整除ax1 - ax2

所以(m/g)整除(a/g)(x1-x2)

因为(m/g)与(a/g)互质,所以(m/g)整除(x1-x2)

原方程的通解为x = x0 + k*(m/g)    (k = 0, 1, 2, …… g-1)

共g个

bubuko.com,布布扣
 1 void solve(int a, int c, int m)
 2 {
 3     int u0, v0;
 4     int g = ex_gcd(a, m, u0, v0);
 5     if(c%g != 0)
 6     {
 7         printf("The equation has no solution!\n");
 8         return;
 9     }
10     int i, x;
11     for(i=0; i<g; ++i)
12     {
13         x = c/g*u0 + m/g*i;
14         x = x % m;
15         if(x<0)
16             x+=m;
17         printf("%d\n", x);
18     }
19 }
代码君

解同余式ax ≡ c(mod m),布布扣,bubuko.com

解同余式ax ≡ c(mod m)

标签:style   blog   http   color   os   io   

原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/3856481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!