দেওয়া কাজ হল লিডিং বা ট্রেইলিং শূন্য বা এক ছাড়া এমন সর্বোচ্চ সংখ্যা খুঁজে বের করা যাদের ডিজিটগুলোর ফ্যাক্টোরিয়াল গুণফল দেওয়া সংখ্যা N-এর ডিজিটগুলোর ফ্যাক্টোরিয়াল গুণফলের সমান।
উদাহরণ দিয়ে বোঝা যাক
ইনপুট - N = 4912
আউটপুট - 73332222
ব্যাখ্যা - 4! * 9! * 1! * 2! = 7! * 3! * 3! * 3! * 2! * 2! * 2! * 2! = ১৭,৪১৮,২৪০
ইনপুট - N = 340
আউটপুট - 3322
প্রোগ্রামে ব্যবহৃত পদ্ধতি
সর্বোচ্চ উত্তর পেতে হলে দেওয়া সংখ্যক প্রাইম নম্বরের ফ্যাক্টোরিয়াল গুণফল হিসেবে প্রকাশ করতে হবে।
যদি দেওয়া সংখ্যাতে শুধু শূন্য ও এক থাকে তবে আউটপুট খুঁজে বের করা সম্ভব নয়।
MaxNum() ফাংশনে total_digits নামক একটি ইন্টিজার ভেরিয়েবল তৈরি করুন ডিজিটের মোট সংখ্যা সংরক্ষণ করার জন্য এবং Frq[] = {0} নামক একটি ইন্টিজার অ্যারে আরম্ভ করুন প্রতিটি উদ্ভূত সংখ্যার ফ্রিকোয়েন্সি সংরক্ষণ করার জন্য।
i=0 থেকে i<total_digits পর্যন্ত লুপ চালান এবং প্রতিটি ডিজিটের জন্য চেক করুন এটি প্রাইম কিনা।
যতি বর্তমান ডিজিট প্রাইম হয়, তবে সেটি Frq[] অ্যারেতে ১ যোগ করুন।
অন্যথায়, যদি ডিজিট প্রাইম না হয়, তবে আলাদা if স্টেটমেন্ট দিয়ে চেক করুন এটি ৪, ৬, ৮ বা ৯ কিনা এবং তার মৌলিক প্রাইম ফ্যাক্টোরিয়ালে ভেঙে ফ্রিকোয়েন্সি বাড়ান।
ফাইনাল আউটপুট সংরক্ষণের জন্য 'ans' নামক একটি খালি স্ট্রিং তৈরি করুন।
ফাইনাল ধাপে যাওয়ার আগে চেক করুন সংখ্যাতে শুধু এক ও শূন্য আছে কিনা। যদি হয়, তবে মূল স্ট্রিং ফেরত দিন অন্যথায় পরবর্তী ধাপে যান।
i=9 থেকে i>=2 পর্যন্ত লুপ চালান। C = Frq[i] টাইপ ইন্টিজার ভেরিয়েবল আরম্ভ করুন এবং ফর লুপের ভেতরে while(C--) কন্ডিশন সহ একটি হুইল লুপ তৈরি করুন যেখানে ans+=(char)(i+48) দিয়ে ফাইনাল আউটপুট স্ট্রিং ans-এ সংরক্ষণ করুন।
C++ প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
string MaxNum(string str){
int total_digits = str.length();
int Frq[15] = { 0 };
// প্রতিটি ডিজিটের ফ্রিকোয়েন্সি বের করা
for (int i = 0; i < total_digits; i++){
if (str[i] == '1'|| str[i] == '2'|| str[i] == '3'|| str[i] == '5'|| str[i] == '7'){
Frq[str[i] - 48] += 1;
}
// 4! = 2! * 2! * 3!
if (str[i] == '4'){
Frq[2] += 2;
Frq[3]++;
}
// 6! = 5! * 3!
if (str[i] == '6'){
Frq[5]++;
Frq[3]++;
}
// 8! = 7! * 2! * 2! * 2!
if (str[i] == '8'){
Frq[7]++;
Frq[2] += 3;
}
// 9! = 7! * 3! * 3! * 2!
if (str[i] == '9'){
Frq[7]++;
Frq[3] += 2;
Frq[2]++;
}
}
string ans = "";
// যদি সংখ্যাতে শুধু ১ বা ০ থাকে
if (Frq[1] == total_digits || Frq[0] == total_digits || (Frq[0] + Frq[1]) == total_digits){
return str;
}
else{
// সম্ভাব্য সর্বোচ্চ সংখ্যা
for (int i = 9; i >= 2; i--){
int C = Frq[i];
while (C--){
ans += (char)(i + 48);
}
}
return ans;
}
}
// মেইন ফাংশন
int main(){
string str = "340";
cout << MaxNum(str);
return 0;
}
আউটপুট
3322