Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm ra giá trị của một phương trình đã cho bằng Python

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> 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