查找 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

相关文章


有用资源