สมมติว่าเรามีตัวเลข N เราต้องหาตัวประกอบทั้งหมดของ N และส่งคืนผลคูณของตัวประกอบสี่ตัวของ N ว่า:ผลรวมของปัจจัยสี่ตัวเท่ากับ N ผลคูณของปัจจัยสี่ตัวมีค่าสูงสุด ปัจจัยทั้งสี่สามารถมีค่าเท่ากันเพื่อเพิ่มผลผลิตให้สูงสุด
ดังนั้นหากอินพุตเป็น N =60 ผลลัพธ์จะเป็น ปัจจัยทั้งหมดคือ -> 1 2 3 4 5 6 10 12 15 20 30 60 และผลิตภัณฑ์คือ 50625 เนื่องจากเรา 15 ได้รับการคัดเลือกสี่ครั้งเพื่อสร้างผลิตภัณฑ์ ใหญ่ที่สุด
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ปัจจัย :=รายการใหม่
-
สำหรับฉันอยู่ในช่วง 1 ถึงจำนวนเต็มของ (รากที่สองของ n) + 1 ทำ
-
ถ้า n mod i เหมือนกับ 0 แล้ว
-
ใส่ i ต่อท้ายตัวประกอบ
-
ใส่จำนวนเต็มของ (n / i) ที่ส่วนท้ายของตัวประกอบ
-
-
-
เรียงลำดับปัจจัยรายการ
-
ปัจจัยแสดงผล
-
final_prod :=1 แฟล็ก :=1
-
สำหรับฉันอยู่ในช่วง 0 ถึงขนาดของปัจจัย ทำ
-
สำหรับ j ในช่วง i ถึงขนาดของปัจจัย ทำ
-
สำหรับ k ในช่วง j ถึงขนาดของตัวประกอบ ทำ
-
y :=n - ปัจจัย[i] - ปัจจัย[j] - ปัจจัย[k]
-
ถ้า y <=0 แล้ว
-
ออกจากวง
-
-
ถ้า n mod y เหมือนกับ 0 แล้ว
-
ธง :=0
-
-
-
-
-
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