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

Python 프로그램에서 최대 곱과 합이 N - Set-2인 N의 4개 인수 찾기

<시간/>

숫자 N이 있다고 가정하면 N의 모든 요소를 ​​찾고 N의 4개 요소의 곱을 다음과 같이 반환해야 합니다. 4개 요소의 합은 N과 같습니다. 4개 요소의 곱은 최대입니다. 4가지 요소는 모두 제품을 최대화하기 위해 서로 동일할 수 있습니다.

따라서 입력이 N =60과 같으면 출력은 모든 요소가 -> 1 2 3 4 5 6 10 12 15 20 30 60이고 제품은 50625가 됩니다. 가장 큽니다.

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

  • 요인 :=새 목록

  • 범위 1에서 (n의 제곱근) + 1의 정수까지의 i에 대해

    • n mod i가 0과 같으면

      • 인수 끝에 i 삽입

      • 인수의 끝에 (n / i)의 정수 삽입

  • 목록 요소 정렬

  • 표시 요소

  • final_prod :=1, 플래그 :=1

  • 범위 0에서 요인 크기까지의 i에 대해

    • 범위 i의 j에 대해 인자의 크기에 대해

      • 범위 j의 k에 대해 인자의 크기에 대해 수행

        • y :=n - 인자[i] - 인자[j] - 인자[k]

        • y <=0이면

          • 루프에서 나오다

        • n mod y가 0과 같으면

          • 플래그 :=0

  • final_prod :=요인의 최대값[i] * 요인[j] * 요인[k] * y, final_prod

  • 플래그가 0과 같으면

    • 표시 final_prod

  • 그렇지 않으면

    • "불가능" 표시

예시

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

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)

입력

60

출력

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