Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 최대 곱과 합이 N과 동일한 N의 4개 인수 찾기 - Set-2


숫자 N이 있다고 가정합니다. N의 인자를 찾고 다음과 같은 N의 4개 인자의 곱만 반환해야 합니다. -

  • 네 가지 요소의 합은 N과 같습니다.

  • 4가지 요소의 곱이 최대입니다.

4가지 요소는 모두 제품을 최대화하기 위해 서로 동일할 수 있습니다.

따라서 입력이 N =60과 같으면 모든 요인이 → 1 2 3 4 5 6 10 12 15 20 30 60이므로 출력은 50625가 되고 우리 15가 4번 선택되었으므로 그 곱은 50625가 됩니다. 제품을 가장 크게 만듭니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • my_map :=새 지도

  • v :=새 목록, v1 :=새 목록

  • 범위 1에서 (n) + 1의 제곱근의 천장까지 i에 대해 다음을 수행합니다.

    • n mod i가 0과 같으면

      • v 끝에 i 삽입

      • i가 (n/i)의 정수 부분과 같지 않고 i가 1과 같지 않으면

        • v의 끝에 (n / i)의 정수 부분 삽입

  • s :=v의 크기

  • 최대 :=-1

  • map1 :=크기(n + 5)의 배열을 0으로 채웁니다.

  • 범위 0에서 s에 있는 i에 대해 수행

    • i ~ s 범위의 j에 대해 수행

      • v[i] + v[j]

        • v1의 끝에 v[i] + v[j] 삽입

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

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

  • s :=v1의 크기

  • 범위 0에서 s에 있는 i에 대해 수행

    • 요소 :=n - (v1[i])

    • my_map의 요소인 경우

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

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

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

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

      • 최대 :=최대 a * b * c * d, 최대

  • 최대값이 -1과 같으면

    • "불가능" 표시

  • 그렇지 않으면

    • 최대 표시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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)

입력

60

출력

Maximum product 50625