首页 > 代码库 > 解同余式ax ≡ c(mod m)
解同余式ax ≡ c(mod m)
将式子变形为
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个
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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。