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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP