[英]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)
您知道v2
和v1
是什么,所以這只是一個帶整數解的線性方程式。 找出那條線上的所有點,其中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.