解决同时模块方程的代码?

时间:2011-01-10 06:48:13

标签: c++ c math equation

这里的符号=用于表示“与...一致”

如果

(1) n = a mod j
(2) n = b mod k

然后

(3) n = c mod l

基本上,给出前两个方程式,找到第三个方程式。出于我的目的,我事先知道存在一个解决方案。

我想用C或C ++中的一些代码为我做这个,或者是一个链接到库或我可以在C / C ++项目中使用的东西。感谢。

2 个答案:

答案 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代码,请告诉我,尽管翻译应该相当简单。