在Python程序中找到具有最大乘积和等于N的四个N因子-Set-2

假设我们有一个数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