आप gmpy मॉड्यूल को भी देखना चाहेंगे । यह पायथन और GMP बहु-परिशुद्धता पुस्तकालय के बीच एक इंटरफ़ेस है। gmpy एक इनवर्टर फ़ंक्शन प्रदान करता है जो वास्तव में आपकी आवश्यकता है:
>>> import gmpy
>>> gmpy.invert(1234567, 1000000007)
mpz(989145189)
अद्यतन उत्तर
जैसा कि @hyh ने उल्लेख किया है, gmpy.invert()
यदि प्रतिलोम मौजूद नहीं है , तो रिटर्न 0 है। यह जीएमपी के mpz_invert()
कार्य के व्यवहार से मेल खाता है । gmpy.divm(a, b, m)
के लिए एक सामान्य समाधान प्रदान करता है a=bx (mod m)
।
>>> 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)
divm()
एक समाधान लौट जब होगा gcd(b,m) == 1
और जब गुणक उलटा मौजूद नहीं है एक अपवाद को जन्म देती है।
अस्वीकरण: मैं gmpy लाइब्रेरी का वर्तमान अनुरक्षक हूँ।
अद्यतन उत्तर 2
gmpy2 अब ठीक से एक अपवाद उठाता है जब उलटा मौजूद नहीं होता है:
>>> import gmpy2
>>> gmpy2.invert(0,5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: invert() no inverse exists
pow
फ़ंक्शन का उपयोग करने में सक्षम होंगेy = pow(x, -1, p)
:। Bugs.python.org/issue36027 देखें । यह केवल मानक पुस्तकालय में प्रदर्शित होने वाले समाधान से पूछे गए सवाल से 8.5 साल लग गए!