আপনি জিএমপি মডিউলটিও দেখতে চাইতে পারেন । এটি পাইথন এবং GMP একাধিক-যথার্থ লাইব্রেরির মধ্যে একটি ইন্টারফেস। জিএমপি একটি বিপরীতমুখী ফাংশন সরবরাহ করে যা আপনার প্রয়োজনের মতো করে:
>>> import gmpy
>>> gmpy.invert(1234567, 1000000007)
mpz(989145189)
আপডেট উত্তর
@ হাই দ্বারা উল্লিখিত হিসাবে, 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মাল্টিপ্লেসিটিভ ইনভার্সের অস্তিত্ব না থাকলে যখন এবং ব্যতিক্রম উত্থাপন করে।
দাবি অস্বীকার: আমি জিএমপি লাইব্রেরির বর্তমান রক্ষণাবেক্ষণকারী।
আপডেট উত্তর 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 বছর সময় নিয়েছে!