Python程序:查找N的四个因数,使其乘积最大且和等于N - 集2
假设我们有一个数字N,我们需要找到N的所有因数,并返回N的四个因数的乘积,满足以下条件:四个因数的和等于N。四个因数的乘积最大。所有四个因数可以相等,以使乘积最大化。
因此,如果输入为N = 60,则输出将为所有因数 -> 1 2 3 4 5 6 10 12 15 20 30 60,乘积为50625,因为我们选择了15四次以使乘积最大。
为了解决这个问题,我们将遵循以下步骤:
factors := 新列表
对于范围从1到整数(平方根(n))+1的i,执行:
如果n mod i等于0,则:
将i插入factors列表的末尾
将整数(n / i)插入factors列表的末尾
对列表factors进行排序
显示factors
final_prod := 1, flag := 1
对于范围从0到factors大小的i,执行:
对于范围从i到factors大小的j,执行:
对于范围从j到factors大小的k,执行:
y := n - factors[i] - factors[j] - factors[k]
如果y <= 0,则:
退出循环
如果n mod y等于0,则:
flag := 0
final_prod := factors[i] * factors[j] * factors[k] * y 与 final_prod 的最大值
如果flag等于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
广告