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 - Set-2 trong Chương trình Python

Giả sử chúng ta có một số N, chúng ta phải tìm tất cả các thừa số của N và trả về tích của bốn thừa số của N sao cho:Tổng của bốn thừa số bằng N. Tích của bốn thừa số là cực đại. 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à Tất cả các hệ số là -> 1 2 3 4 5 6 10 12 15 20 30 60 và sản phẩm là 50625, vì chúng ta 15 đã được chọn bốn lần để tạo ra 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 -

  • factor:=một danh sách mới

  • đối với tôi trong phạm vi từ 1 đến số nguyê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 i vào cuối các yếu tố

      • chèn số nguyên của (n / i) vào cuối thừa số

  • sắp xếp các yếu tố danh sách

  • các yếu tố hiển thị

  • final_prod:=1, flag:=1

  • đối với tôi trong phạm vi từ 0 đến kích thước của các yếu tố, hãy thực hiện

    • đối với j trong phạm vi i đến kích thước của thừa số, thực hiện

      • đối với k trong phạm vi j đến kích thước của thừa số, thực hiện

        • y:=n - hệ số [i] - hệ số [j] - hệ số [k]

        • nếu y <=0, thì

          • đi ra từ vòng lặp

        • nếu n mod y giống 0 thì

          • cờ:=0

  • final_prod:=tối đa trong số các yếu tố [i] * các yếu tố [j] * các yếu tố [k] * y, final_prod

  • nếu cờ giống 0, thì

    • hiển thị final_prod

  • nếu không,

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

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 *
def get_factors(n) :
   factors = []
   for i in range(1, int(sqrt(n)) + 1) :
      if n % i == 0 :
         factors.append(i)
         factors.append(n // i)
   factors.sort()
   print("Factors are ", factors)
   final_prod = 1
   flag = 1
   for i in range(0, len(factors)) :
      for j in range(i, len(factors)) :
         for k in range(j, len(factors)) :
            y = n - factors[i] - factors[j] - factors[k]
            if y <= 0 :
               break
            if n % y == 0 :
               flag = 0
               final_prod = max(factors[i] * factors[j] * factors[k] * y , final_prod)
   if flag == 0 :
      print("Product is", final_prod)
   else :
      print("Not possible")

n = 60
get_factors(n)

Đầu vào

60

Đầu ra

Factors are [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60] Product is 50625