这里的符号=用于表示“与...一致”
如果
(1) n = a mod j
(2) n = b mod k
然后
(3) n = c mod l
基本上,给出前两个方程式,找到第三个方程式。出于我的目的,我事先知道存在一个解决方案。
我想用C或C ++中的一些代码为我做这个,或者是一个链接到库或我可以在C / C ++项目中使用的东西。感谢。
答案 0 :(得分:5)
如果给出a,b,j和k,l = jk,并且gcd(j,k)= 1,则可以使用Chinese Remainder Theorem找到c。 (如果j和k具有非平凡的GCD,则解c可能存在也可能不存在。)
答案 1 :(得分:1)
表示无限算术序列的库在这里很有用,但我个人并不知道。无论如何,这是一个蛮力解决方案,基本上从每个给定的模块方程生成n
的可能性并找到交集。它通过“leap-frogging”(伪代码)找到n
的最低值:
value_left := a
value_right := b
while value_left != value_right:
if value_left < value_right:
value_left := value_left + j
else:
value_right := value_right + k
end if
end while loop
return value_left % l // as in "leggo-mah-eggo!"
如果您想要实际的C代码,请告诉我,尽管翻译应该相当简单。