আমাদের ৫টি পূর্ণসংখ্যা ভেরিয়েবল দেওয়া আছে: Num, P1, P2, profit_P1, profit_P2। কাজ হল [1, Num] রেঞ্জের সব প্রাকৃতিক সংখ্যা থেকে মোট লাভ সর্বোচ্চ করা। পদ্ধতিটি হল: যদি কোনো ধনাত্মক সংখ্যা P1 দিয়ে বিভাজ্য হয়, তবে লাভ profit_P1 বাড়বে এবং যদি P2 দিয়ে বিভাজ্য হয়, তবে লাভ profit_P2 বাড়বে। একটি ধনাত্মক পূর্ণসংখ্যা থেকে লাভสูচক মান সর্বোচ্চ একবার যোগ করা যাবে।
উদাহরণ দিয়ে বুঝি
উদাহরণ ১
ইনপুট: int num = 4, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2;
আউটপুট: সব ব্যক্তির মোট লাভ সর্বোচ্চ করা 4
ব্যাখ্যা: ১ থেকে ৪ পর্যন্ত সংখ্যা রেঞ্জে:
- কোনো সংখ্যাও P1 (৬) দিয়ে বিভাজ্য নয়
- ১ এবং ২ P2 (২) দিয়ে বিভাজ্য
- ১ এবং ২ P2 দিয়ে বিভাজ্য হওয়ায় লাভ ২×২ = ৪
উদাহরণ ২
ইনপুট: num = 3, P1 = 1, P2 = 2, profit_P1 = 3, profit_P2 = 4
আউটপুট: সব ব্যক্তির মোট লাভ সর্বোচ্চ করা 10
ব্যাখ্যা:
- ১, ২ এবং ৩ A (P1=1) দিয়ে বিভাজ্য
- ২ একমাত্র সংখ্যা যা B (P2=2) দিয়ে বিভাজ্য
- ২ A এবং B উভয় দিয়ে বিভাজ্য
- ১ এবং ৩ A দিয়ে বিভাজ্য → লাভ ২×৩ = ৬
- ২ B দিয়ে বিভাজ্য → লাভ ১×৪ = ৪
- ২ উভয় দিয়ে বিভাজ্য হলেও লাভ সর্বোচ্চ করার জন্য এটি B দিয়ে বিভাজ্য মाना হয়েছে A-র বদলে
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- ৬টি পূর্ণসংখ্যা ভেরিয়েবল দেওয়া আছে: ধনাত্মক সংখ্যা রেঞ্জ (Num), P1 (প্রথম ব্যক্তি), P2 (দ্বিতীয় ব্যক্তি), profit_P1 (ব্যক্তি ১-এর লাভ), profit_P2 (ব্যক্তি ২-এর লাভ)।
- main ফাংশনে profitMaximisation() ইউটিলিটি মেথড কল করা হয় যা সকল গাণনার জন্য দায়িত্বী।
- ফাংশনের ভিতরে দেখা যায় যে, যেকোনো সংখ্যা যদি P1 এবং P2 উভয় দিয়ে বিভাজ্য হয়, তবে সেটি অবশ্যই P1 বা P2-এর LCM-এর গুণিতক হবে। এটিকে তার লাভ বেশি দেওয়া সংখ্যা দিয়ে ভাগ করা উচিত।
- সূত্র: profit_P1 * (num / P1) + profit_P2 * (num / P2) – min(profit_P1, profit_P2) * (num / lcm(P1, P2))
- CalculateGcd() মেথড দিয়ে LCM নির্ণয় করা হয়।
- চূড়ান্ত আউটপুট main মেথডে নিয়ে ইউজারকে দেখানো হয়।
উদাহরণ কোড
public class testClass {
static int CalculateGcd(int n1, int n2) {
if (n2 == 0)
return n1;
return CalculateGcd(n2, n1 % n2);
}
static int profitMaximisation(int n, int a, int b, int x, int y) {
int result = x * (n / a);
result += y * (n / b);
result -= Math.min(x, y) * (n / ((a * b) / CalculateGcd(a, b)));
return result;
}
public static void main(String[] args) {
int num = 6, P1 = 6, P2 = 2, profit_P1 = 8, profit_P2 = 2;
System.out.println("Maximize the total profit of all the persons X "
+ profitMaximisation(num, P1, P2, profit_P1, profit_P2));
}
}
আউটপুট
Maximize the total profit of all the persons X 12