在Python中反转模运算符

时间:2016-04-29 23:43:37

标签: python math

我正在尝试在Python中解决time的以下方程组:

position1 = (initial_position1 + (time * velocity1)) % 360
position2 = (initial_position2 + (time * velocity2)) % 360

有两个物体围绕同一方向的中心点旋转,速度不同,并且可能有不同的起点(即它们在给定时间的位置)。我想知道两个物体需要多长时间才能相遇。

为此,我有这个等式:

(initial_position1 + (time * velocity1)) % 360 == (initial_position2 + (time * velocity2)) % 360

但我无法为time解决它,因为%运算符没有反函数。有没有一个已知的解决方案?如果没有,任何建议都会派上用场。

3 个答案:

答案 0 :(得分:4)

你正试图解决

x1 + t * v1 = x2 + t * v2
and 
x1 - x2 = 360 * n

这转化为

n = t / 360 * (v2 - v1)
or
t = n * 360 / (v2 - v1)

你知道v2v1是什么,所以这只是一个带整数解的线性方程。找到该行上的所有点,其中n是整数,并取最小的正整数。

答案 1 :(得分:2)

如何为逆模编写自己的函数?

def invmodp(a, p):
    for d in xrange(1, p):
        r = (d * a) % p
        if r == 1:
            break
    else:
        raise ValueError('%d has no inverse mod %d' % (a, p))
    return d

请注意,并非所有集合都具有反模数...

答案 2 :(得分:0)

不,这是不可能的。在模运算之后,有多个潜在的起始值会产生相同的结果。如果要返回原始起始值,请保存对它的引用。