假设我们有一个数字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