簡體   English   中英

Python中模運算符的逆函數

[英]Inverse of modulo operator in Python

我正在嘗試在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 ,因為是無反函數%運營商。 是否有已知的解決方案? 如果沒有,那么任何建議都會派上用場。

您正在嘗試解決

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

這轉化為

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

您知道v2v1是什么,所以這只是一個帶整數解的線性方程式。 找出那條線上的所有點,其中n是整數,並取最小的正數。

如何編寫自己的逆模函數?

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

請注意,並非所有集合都具有逆模...

不,不可能。 模運算后,有多個可能的起始值得出相同的結果。 如果要參考原始起始值,請保存對其的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM