ধরা যাক একটি সংখ্যা N দেওয়া আছে। আমাদের N-এর সকল ফ্যাক্টর বের করে চারটি ফ্যাক্টর খুঁজে বের করতে হবে যাতে: চারটি ফ্যাক্টরের যোগফল N-এর সমান হয়। চারটি ফ্যাক্টরের গুণফল সর্বাধিক হয়। চারটি ফ্যাক্টর একে অপরের সমান হতে পারে গুণফল সর্বাধিক করার জন্য।
যেমন, ইনপুট N = 60 হলে আউটপুট হবে: সকল ফ্যাক্টর -> 1 2 3 4 5 6 10 12 15 20 30 60 এবং গুণফল 50625, কারণ 15 কে চারবার বেছে নেওয়া হয়েছে গুণফল সর্বাধিক করার জন্য।
সমাধানের ধাপসমূহ
- factors := একটি নতুন লিস্ট
- for i in range 1 to int(sqrt(n)) + 1:
- if n % i == 0:
- i কে factors-এ যোগ করুন
- n // i কে factors-এ যোগ করুন
- if n % i == 0:
- factors লিস্টটি সর্ট করুন
- factors প্রদর্শন করুন
- final_prod := 1, flag := 1
- তিনটি নেস্টেড লুপ (i, j, k) চালান factors-এ:
- y := n - factors[i] - factors[j] - factors[k]
- যদি y <= 0 হয়, তবে ব্রেক করুন
- যদি n % y == 0 হয়, তবে flag := 0 এবং 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