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