สมมติว่าเรามีตัวเลข 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