ধরুন আমাদের পাঁচটি পূর্ণসংখ্যা দেওয়া হল a, b, c, d, n। আমাদের খুঁজে বের করতে হবে ((ab)(cd)) mod n. আউটপুট মান একটি পূর্ণসংখ্যা সংখ্যা।
সুতরাং, যদি ইনপুট হয় a =2, b =3, c =2, d =4, n =10, তাহলে আউটপুট হবে 6।
2^3 = 8 2^4 = 16 8^16 = 281474976710656 281474976710656 mod 10 = 6
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন সাহায্যকারী() সংজ্ঞায়িত করুন। এটি n
- লাগবে
- p :=n
- i :=2
- যখন i * i <=n, do
- যদি n mod i 0 এর মত হয়, তাহলে
- p :=p - (p / i) এর ফ্লোর মান
- যদিও n mod i 0 এর মত, do
- n :=(n / i) এর ফ্লোর মান
- যদি আমি 2 এর মত না হয়, তাহলে
- i :=i + 2
- অন্যথায়,
- i :=i + 1
- যদি n mod i 0 এর মত হয়, তাহলে
- যদি n> 1 হয়, তাহলে
- p :=p - (p / n) এর ফ্লোর মান
- রিটার্ন p
- যদি b 0 এর মত হয় বা (c 0 এর মত হয় এবং d 0 এর মত না হয়) তাহলে
- রিটার্ন (a ^ 0) মোড n
- যদি c 1 এর মত হয় বা d 0 এর মত হয়, তাহলে
- রিটার্ন (a^b) মোড n
- যদি a 0 এর মত হয় অথবা একটি mod n 0 এর মত হয়, তাহলে
- রিটার্ন 0
- যদি d 1 এর মত হয়, তাহলে
- রিটার্ন (a^ b * c) mod n
- p :=সাহায্যকারী(n)
- e :=(c^d) mod p + p
- রিটার্ন (((a^b) mod n) ^ e) mod n
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def helper(n): p = n i = 2 while i * i <= n: if n % i == 0: p -= p // i while n % i == 0: n = n // i if i != 2: i += 2 else: i += 1 if n > 1: p -= p // n return p def solve(a, b, c, d, n): if b == 0 or (c == 0 and d != 0): return pow(a, 0, n) if c == 1 or d == 0: return pow(a, b, n) if a == 0 or a % n == 0: return 0 if d == 1: return pow(a, b * c, n) p = helper(n) e = pow(c, d, p) + p return pow(pow(a, b, n), e, n) print(solve(2, 3, 2, 4, 10))
ইনপুট
2, 3, 2, 4, 10
আউটপুট
6