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

更新于:2020年8月25日

89 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告