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 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.