ধরা যাক একটি সংখ্যা N দেওয়া আছে। আমাদের N-এর ফ্যাক্টরগুলো থেকে চারটি ফ্যাক্টর বের করতে হবে যাতে তাদের যোগফল N এবং গুণফল সর্বাধিক হয়। চারটি ফ্যাক্টর একে অপরের সমান হতে পারে।
ইনপুট: N=60 → আউটপুট 50625 (ফ্যাক্টর: 1,2,3,4,5,6,10,12,15,20,30,60; 15 চারবার ব্যবহার করা হয়েছে)।
সমাধানের ধাপসমূহ (হ্যাশ ম্যাপ + দুটি ফ্যাক্টরের যোগফল)
- my_map = {}, v=[], v1=[]
- for i in 1..ceil(sqrt(n)): যদি n%i==0: v-এ i যোগ করুন; যদি i!=n//i এবং i!=1: v-এ n//i যোগ করুন
- s = len(v); maximum=-1; map1[n+5] = 0
- for i in 0..s-1:
- for j in i..s-1:
- যদি v[i]+v[j] < n: v1-এ যোগ করুন; map1[v[i]+v[j]] = [v[i],v[j]]; my_map[v[i]+v[j]] = 1
- for j in i..s-1:
- for i in 0..len(v1)-1:
- element = n - v1[i]
- যদি element in my_map:
- a,b = map1[v1[i]]; c,d = map1[element]
- maximum = max(a*b*c*d, maximum)
- যদি maximum==-1: "Not Possible" প্রিন্ট করুন, অন্যথায় maximum প্রিন্ট করুন
উদাহরণ
from math import sqrt, ceil, floor
def get_product(n):
my_map = {}
v = []; v1 = []
for i in range(1, ceil(sqrt(n)) + 1):
if n % i == 0:
v.append(i)
if i != (n // i) and i != 1:
v.append(n // i)
s = len(v)
maximum = -1
map1 = [0]*(n + 5)
for i in range(s):
for j in range(i, s):
if v[i] + v[j] < n:
v1.append(v[i] + v[j])
map1[v[i] + v[j]] = [v[i], v[j]]
my_map[v[i] + v[j]] = 1
s = len(v1)
for i in range(s):
element = n - v1[i]
if element in my_map:
a = map1[v1[i]][0]
b = map1[v1[i]][1]
c = map1[n - v1[i]][0]
d = map1[n - v1[i]][1]
maximum = max(a * b * c * d, maximum)
if maximum == -1:
print("Not Possible")
else:
print("Maximum product", maximum)
n = 60
get_product(n)
ইনপুট
60
আউটপুট
Maximum product 50625