<p>您可能还想查看<a href="http://code.google.com/p/gmpy/" rel="noreferrer">gmpy</a>模块。它是Python和GMP多精度库之间的接口。gmpy提供了一个反转函数,它可以完全满足您的需要:</p>
<pre><code>>>> import gmpy
>>> gmpy.invert(1234567, 1000000007)
mpz(989145189)
</code></pre>
<p><strong>更新答案</strong></p>
<p>正如@hyh所指出的,如果不存在逆函数,<code>gmpy.invert()</code>将返回0。符合GMP的<code>mpz_invert()</code>功能的行为。<code>gmpy.divm(a, b, m)</code>提供了<code>a=bx (mod m)</code>的一般解决方案。</p>
<pre><code>>>> gmpy.divm(1, 1234567, 1000000007)
mpz(989145189)
>>> gmpy.divm(1, 0, 5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: not invertible
>>> gmpy.divm(1, 4, 8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: not invertible
>>> gmpy.divm(1, 4, 9)
mpz(7)
</code></pre>
<p><code>divm()</code>将在<code>gcd(b,m) == 1</code>时返回一个解,并在乘法逆不存在时引发异常。</p>
<p>免责声明:我是gmpy库的当前维护者。</p>
<p><strong>更新了答案2</strong></p>
<p>当反向不存在时,gmpy2现在正确地引发异常:</p>
<pre><code>>>> import gmpy2
>>> gmpy2.invert(0,5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: invert() no inverse exists
</code></pre>