假设我们有一个数字N;我们必须找到N的因子,并且仅返回N的四个因子的乘积,使得-
这四个因子的总和与N相同。
这四个因素的乘积最大。
这四个因素可以彼此相等,以使乘积最大化。
因此,如果输入类似于N = 60,则输出将为50625,因为所有因子均为→1 2 3 4 5 6 10 12 15 20 30 60并且它们的乘积为50625,因为我们15被选择了四次以使产品最大。
为了解决这个问题,我们将遵循以下步骤-
my_map:=新映射
v:=一个新列表,v1:=一个新列表
对于范围1到(n)+ 1的平方根上限的i
在v的末尾插入i
如果i与(n / i)的整数部分不相同并且i与1不相同,则
在v的末尾插入(n / i)的整数部分
如果n mod i等于0,则
s:= v的大小
最大:= -1
map1:=大小(n + 5)的数组,用0填充
对于0到s之间的i,执行
如果v [i] + v [j] <n,则
在v1的末尾插入v [i] + v [j]
map1 [v [i] + v [j]]:= [v [i],v [j]]
my_map [v [i] + v [j]]:= 1
对于范围i至s中的j,执行
s:= v1的大小
对于0到s之间的i,执行
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,最大
元素:= n-(v1 [i])
如果元素在my_map中,则
如果最大值等于-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