首页 > 其他 > 详细

解同余式ax ≡ c(mod m)

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

 

将式子变形为

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)

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!