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