পাঁচটি পূর্ণসংখ্যা a, b, c, d, n দেওয়া আছে। ((a^b)^(c^d)) mod n এর মান বের করতে হবে। আউটপুট হবে একটি পূর্ণসংখ্যা।
ইনপুট a=2, b=3, c=2, d=4, n=10 হলে আউটপুট হবে ৬।
2^3 = 8 2^4 = 16 8^16 = 281474976710656 281474976710656 mod 10 = 6
সমাধানের ধাপসমূহ
- helper() ফাংশন সংজ্ঞায়িত করুন। এটি n গ্রহণ করবে:
- p := n, i := 2
- i × i <= n 때까지:
- যদি n mod i == 0 হয়, তবে p := p - floor(p / i)
- n mod i == 0 থাকার동안: n := floor(n / i)
- যদি i != 2 হয়, তবে i := i + 2, অন্যথায় i := i + 1
- যদি n > 1 হয়, তবে p := p - floor(p / n)
- p ফেরত দিন
- যদি b == 0 বা (c == 0 এবং d != 0) হয়, তবে (a^0) mod n ফেরত দিন
- যদি c == 1 বা d == 0 হয়, তবে (a^b) mod n ফেরত দিন
- যদি a == 0 বা a mod n == 0 হয়, তবে 0 ফেরত দিন
- যদি d == 1 হয়, তবে (a^(b×c)) mod n ফেরত দিন
- p := helper(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