বিবরণ
N এর একটি অ্যারে দেওয়া হয়েছে৷ পূর্ণসংখ্যা যেখানে N একটি জোড় সংখ্যা। অ্যারেতে দুই ধরনের ক্রিয়াকলাপ অনুমোদিত৷
৷- একটি অ্যারের যেকোনো উপাদানের মান 1 দ্বারা বৃদ্ধি করুন।
- যদি অ্যারের দুটি সন্নিহিত উপাদান পরপর মৌলিক সংখ্যা হয়, তাহলে উভয় উপাদান মুছে দিন।
কাজটি হল অ্যারের সমস্ত উপাদান অপসারণের জন্য প্রয়োজনীয় ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করা৷
উদাহরণ
যদি অ্যারে হয় {10, 13} তাহলে ন্যূনতম 2টি অপারেশন প্রয়োজন
- বৃদ্ধি ১ st 1 দ্বারা একটি অ্যারের উপাদান। তাই নতুন অ্যারে হয়ে যায় {11, 13}
- 1 st মুছুন এবং 2 nd উভয়ই ধারাবাহিক মৌলিক সংখ্যা হিসাবে উপাদান
অ্যালগরিদম
<পূর্ব>1. সংখ্যাগুলি অপসারণ করতে, আমাদের অবশ্যই দুটি সংখ্যাকে দুটি পরপর প্রাইমে রূপান্তর করতে হবে৷2৷ ধরা যাক a এবং b পরপর মৌলিক সংখ্যা তাহলে আমরা প্রাইম সংখ্যার প্রাক-কম্পিউট করার জন্য Eratosthenes-এর চালনি ব্যবহার করি এবং তারপর array3 ব্যবহার করে a এর থেকে বড় নয় এবং p এর থেকে বড় প্রথমটি বের করি। একবার এই গণনাটি সম্পন্ন হলে সমস্যা সমাধানের জন্য ডায়নামিক প্রোগ্রামিং ব্যবহার করুনউদাহরণ
#include#include #include namespace ব্যবহার করে std;int minimumPrefixReversals(int *a, int n) { string start =""; স্ট্রিং গন্তব্য ="", t, r; জন্য (int i =0; i > qu; pair p; qu.push(make_pair(start, 0)); যদি (শুরু ==গন্তব্য) { ফেরত 0; } যখন (!qu.empty()) { p =qu.front(); t =p.first; qu.pop(); for (int j =2; j <=n; j++) { r =t; বিপরীত (r.begin(), r.begin() + j); if (r ==গন্তব্য) { ফেরত p.second + 1; } qu.push(make_pair(r, p.second + 1)); } }} int main() { int a[] ={ 1, 2, 4, 3 }; int n =sizeof(a) / sizeof(a[0]); cout <<"সর্বনিম্ন বিপরীত:" < আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট তৈরি করে:
আউটপুট
সর্বনিম্ন বিপরীত:3