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