Giả sử chúng ta được cho năm số nguyên a, b, c, d, n. Chúng ta phải tìm ra ((ab) (cd)) mod n. Giá trị đầu ra là một số nguyên.
Vì vậy, nếu đầu vào là a =2, b =3, c =2, d =4, n =10, thì đầu ra sẽ là 6.
2^3 = 8 2^4 = 16 8^16 = 281474976710656 281474976710656 mod 10 = 6
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một hàm trợ giúp (). Điều này sẽ mất n
- p:=n
- i:=2
- while i * i <=n, do
- nếu n mod i giống 0, thì
- p:=p - giá trị sàn của (p / i)
- trong khi n mod, tôi giống với 0, hãy thực hiện
- n:=giá trị sàn của (n / i)
- nếu tôi không giống với 2, thì
- i:=i + 2
- nếu không,
- i:=i + 1
- nếu n mod i giống 0, thì
- nếu n> 1, thì
- p:=p - giá trị sàn của (p / n)
- trả về p
- nếu b giống 0 hoặc (c giống 0 và d không giống 0), thì
- return (a ^ 0) mod n
- nếu c giống 1 hoặc d giống 0, thì
- return (a ^ b) mod n
- nếu a giống 0 hoặc mod n giống 0 thì
- trả về 0
- nếu d giống với 1, thì
- return (a ^ b * c) mod n
- p:=helper (n)
- e:=(c ^ d) mod p + p
- return (((a ^ b) mod n) ^ e) mod n
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơ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))
Đầu vào
2, 3, 2, 4, 10
Đầu ra
6