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

Tìm bốn thừa số của N với tích lớn nhất và tổng bằng N - Đặt-2 trong Python


Giả sử chúng ta có một số N; chúng ta phải tìm thừa số của N và chỉ trả về tích của bốn thừa số của N sao cho -

  • Tổng của bốn yếu tố giống như N.

  • Tích của bốn yếu tố là tối đa.

Tất cả bốn yếu tố này có thể tương đương với nhau để tối đa hóa sản phẩm.

Vì vậy, nếu đầu vào là N =60, thì đầu ra sẽ là 50625 vì tất cả các thừa số đều là → 1 2 3 4 5 6 10 12 15 20 30 60 và tích của chúng là 50625, vì chúng ta 15 đã được chọn bốn lần để làm cho sản phẩm lớn nhất.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • my_map:=một bản đồ mới

  • v:=a new list, v1:=a new list

  • đối với tôi trong phạm vi 1 đến trần của căn bậc hai của (n) + 1, thực hiện

    • nếu n mod tôi giống 0 thì

      • chèn tôi vào cuối v

      • nếu tôi không giống với phần nguyên của (n / i) và tôi không giống với 1, thì

        • chèn phần nguyên của (n / i) vào cuối v

  • s:=kích thước của v

  • tối đa:=-1

  • map1:=một mảng có kích thước (n + 5) điền vào ô này bằng 0

  • đối với tôi trong phạm vi từ 0 đến s, thực hiện

    • đối với j trong phạm vi từ i đến s, thực hiện

      • nếu v [i] + v [j]

        • chèn v [i] + v [j] vào cuối v1

        • map1 [v [i] + v [j]]:=[v [i], v [j]]

        • my_map [v [i] + v [j]]:=1

  • s:=kích thước của v1

  • đối với tôi trong phạm vi từ 0 đến s, thực hiện

    • phần tử:=n - (v1 [i])

    • if trong my_map, then

      • a:=map1 [v1 [i], 0]

      • b:=map1 [v1 [i], 1]

      • c:=map1 [n - v1 [i], 0]

      • d:=map1 [n - v1 [i], 1]

      • tối đa:=tối đa a * b * c * d, tối đa

  • nếu tối đa bằng -1 thì

    • hiển thị "Không thể"

  • nếu không,

    • hiển thị tối đa

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

from math import sqrt, ceil, floor
def get_product(n):
   my_map = dict()
   v = []
   v1 = []
   for i in range(1,ceil(sqrt(n)) + 1):
   if (n % i == 0):
      v.append(i)
      if (i != (n // i) and i != 1):
         v.append(n // i)
   s = len(v)
   maximum = -1
   map1 = [0]*(n + 5)
   for i in range(s):
      for j in range(i, s):
         if (v[i] + v[j] < n):
            v1.append(v[i] + v[j])
            map1[v[i] + v[j]] =[v[i], v[j]]
            my_map[v[i] + v[j]] = 1
   s = len(v1)
   for i in range(s):
      element = n - (v1[i])
      if (element in my_map):
         a = map1[v1[i]][0]
         b = map1[v1[i]][1]
         c = map1[n - v1[i]][0]
         d = map1[n - v1[i]][1]
         maximum = max(a * b * c * d, maximum)
   if (maximum == -1):
      print("Not Possible")
   else :
      print("Maximum product", maximum)
n = 60
get_product(n)

Đầu vào

60

Đầu ra

Maximum product 50625