假设我们有一个数N,我们必须找到N的所有因子并返回N的四个因子的乘积,使得:四个因子的总和与N相同。四个因子的乘积最大。这四个因素可以彼此相等,以使乘积最大化。
因此,如果输入为N = 60,则输出为:所有因子为-> 1 2 3 4 5 6 10 12 15 20 30 60且乘积为50625,因为我们已经四次选择15作为乘积最大的。
为了解决这个问题,我们将遵循以下步骤-
因素:=一个新列表
对于范围1到(n的平方根)+ 1的整数的i
在因子末插入i
在因子末插入(n / i)整数
如果n mod i等于0,则
排序列表因素
显示因素
final_prod:= 1,标志:= 1
对于范围在0到因子大小之间的i,
对于范围j内的k到因子大小,做
标志:= 0
从循环中出来
y:= n-因素[i]-因素[j]-因素[k]
如果y <= 0,则
如果n mod y与0相同,则
对于范围i中的j到因子大小,
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