查找 N 的四个因数,使乘积最大且和等于 N - Python 程序中的 Set-2
pythonserver side programmingprogramming更新于 2025/10/10 23:40:17
假设我们有一个数字 N,我们必须找到 N 的所有因数并返回 N 的四个因数的乘积,使得:四个因数的总和等于 N。四个因数的乘积最大。所有四个因数可以彼此相等以使乘积最大化。
因此,如果输入为 N = 60,则输出将是所有因数都是 -> 1 2 3 4 5 6 10 12 15 20 30 60,乘积为 50625,因为 15 已被选中四次,使乘积最大。
为了解决这个问题,我们将遵循以下步骤 −
因数 := 一个新列表
对于范围从 1 到 (n 的平方根) + 1 的整数的 i,执行
如果 n mod i 等于 0,则
在因数末尾插入 i
在因数末尾插入 (n / i) 的整数
对列表进行排序因子
显示因子
final_prod := 1, flag := 1
对于 i 在 0 到因子大小的范围内,执行
对于 j 在 i 到因子大小的范围内,执行
对于 k 在 j 到因子大小的范围内,执行
y := n - 因子[i] - 因子[j] - 因子[k]
如果 y <= 0,则
退出循环
如果 n mod y 等于 0,则
flag := 0
final_prod := factors[i] * factors[j] * factors[k] * y 的最大值,final_prod
如果 flag 与 0 相同,则
显示 final_prod
否则,
显示"Not possible"
示例
让我们看看下面的实现以便更好地理解 −
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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

