কম্পিউটার

C++ ব্যবহার করে শুধুমাত্র বিজোড় সংখ্যা দিয়ে তৈরি Nth সংখ্যা খুঁজুন


গাণিতিক সমস্যা সমাধানের জন্য C++ ফাংশনের একটি বিশাল তালিকা রয়েছে। একটি গাণিতিক ফাংশন হল কোড ব্যবহার করে Nth বিজোড় সংখ্যা বের করা। এই নিবন্ধটি বিজোড় Nth সংখ্যা খুঁজে বের করার সম্পূর্ণ পদ্ধতির বর্ণনা করবে এবং বিজোড় সংখ্যাগুলি কী এবং কোন সংখ্যাগুলি বিজোড় সংখ্যা দ্বারা গঠিত তা বুঝতে পারবে৷

শুধুমাত্র বিজোড় সংখ্যা দিয়ে তৈরি Nth সংখ্যা খুঁজে বের করা

বিজোড় সংখ্যা দুই দ্বারা ভাগ করলে অবশিষ্টাংশ দেয়, তাই প্রথম কয়েকটি বিজোড় সংখ্যা হল 1,3,5,7,9,11,13,15,17,19...

প্রয়োজনীয় সংখ্যা খুঁজে পেতে, আমাদের এখানে দুটি পন্থা আছে -

পন্থা 1 - প্রতিটি স্বাভাবিক সংখ্যা পরীক্ষা করুন, এটি একটি বিজোড় সংখ্যা হোক বা না হোক এবং প্রতিটি বিজোড় সংখ্যার জন্য গণনা করুন যতক্ষণ না গণনা n এর সমান হয়, এবং সংখ্যাটি জোড় পাওয়া গেলে গণনা করবেন না, অর্থাৎ, জোড় সংখ্যাটি এড়িয়ে গিয়ে বিজোড় সংখ্যা গণনা করুন এবং প্রয়োজনীয় Nth নম্বর দেওয়া।

বিজোড় সংখ্যার সমন্বয়ে Nth সংখ্যা বের করার এই পদ্ধতিটি সহজ হতে পারে কারণ আমরা শুধু প্রতিটি সংখ্যা পরীক্ষা করছি এবং বিজোড় সংখ্যা গণনা করছি, কিন্তু কম্পিউটার প্রোগ্রামিংয়ের ক্ষেত্রে, এই পদ্ধতিটি এই কাজটি সম্পূর্ণ করতে অনেক সময় নেয়।

পন্থা 2 − বিজোড় সংখ্যা দ্বারা গঠিত প্রতিটি সংখ্যার শেষটিতে 1,3,5,7,9 থাকতে পারে, তাই তারা বিজোড় সংখ্যা। তাই আমরা প্রথমে পরীক্ষা করি যে Nth সংখ্যাটি 1,3,5,7,9 যদি হ্যাঁ হয়, তাহলে আমরা উত্তর পাব; অন্যথায়, আমরা অন্যান্য সম্ভাব্য সংখ্যায় চলে যাই, যেগুলো হল 11.13,15,17,19 এবং তারপর আসে 21,23,25,27,29। এটি একটি প্যাটার্ন গঠন করে 1 * 10 + {শেষ সম্ভাব্য সংখ্যা}।

উদাহরণ

Last possible numbers are 1,3,5,7,9
Next possible numbers can be found by
1 * 10 + 1 =11
1 * 10 + 3 = 13
1 * 10 + 5 = 15
1 * 10 + 7 = 17
1* 10 + 9 = 19
i.e 11,13,15,17,19

নমুনা কোড

প্রথমে, আসুন দেখি কোডটি কেমন দেখায় −

#include<bits/stdc++.h>
using namespace std;
int main(){
    queue<int> q;
    int cnt = 0, ans = 0;
    int n;
    cin >> n;
    int a[5]={1,3,5,7,9};
    for(int i = 0; i < 5;i++){
        cnt++;
        if(cnt == n)
            ans = a[i];
        q.push(a[i]);
    }
    if(ans)
        cout << ans << "\n";
    else{
        while(true){
            int x = q.front();
            q.pop();
            for(int j = 0; j < 5; j++) {
                int temp = x * 10 + a[j];
                q.push(temp);
                cnt++;
                if(cnt == n)
                    ans = temp;
            }
            if(ans)
                break;
        }
        cout << ans << "\n";
    }
    return 0;
}

আউটপুট

9

(যখন আমরা একটি ইনপুট হিসাবে 5 প্রদান করি, তখন আমরা একটি আউটপুট হিসাবে 9 পাই)

উপরের কোডটি হল C++ কোড শুধুমাত্র বিজোড় সংখ্যা দিয়ে তৈরি Nth সংখ্যা খুঁজে বের করার জন্য। এই কোডটি বোঝার জন্য, আসুন এই কোডটি ভাঙি এবং সম্পূর্ণ কোড বোঝার জন্য এর প্রতিটি অংশ বুঝতে পারি।

কোডের ব্যাখ্যা

ধাপ 1 − ব্যবহারকারীর কাছ থেকে n নেওয়া এবং প্রয়োজনীয় পরিবর্তনশীল শুরু করা।

int main() {
   queue<int> q;
   int cnt = 0, ans = 0;
   int n;
   cin >> n;
   int a[5]={1,3,5,7,9};

এখানে আমরা একটি সারি তৈরি করি এবং উত্তর সংরক্ষণ করতে গণনা এবং উত্তর রাখার জন্য cnt পরিবর্তনশীল শুরু করি। এছাড়াও, আমরা cin ব্যবহার করে ব্যবহারকারীর কাছ থেকে ইনপুট নিচ্ছি এবং প্রথম সম্ভাব্য সংখ্যাগুলির সাথে একটি অ্যারে শুরু করছি৷

ধাপ 2 − প্রারম্ভিক সম্ভাব্য সংখ্যাগুলিতে Nth নম্বর পাওয়া যায় কিনা এবং সেই সংখ্যাগুলিকে সারিতে সংরক্ষণ করা।

for(int i = 0; i < 5;i++){
   cnt++;
   if(cnt == n)
      ans = a[i];
      q.push(a[i]);
   }
   if(ans)
      cout << ans << "\n";

উপরের কোডগুলিতে, আমরা পরীক্ষা করছি যে Nth নম্বরটি প্রথম সম্ভাব্য সংখ্যাগুলিতে পাওয়া যায় কিনা, একটি অ্যারেতে সংরক্ষিত এবং অ্যারেতে উপস্থিত নম্বরগুলি সহ পুশিং কিউ, এবং যদি প্রথম সম্ভাব্য সংখ্যাগুলিতে Nth নম্বর পাওয়া যায় তবে আউটপুট দিচ্ছি৷

ধাপ 3 − পরবর্তী সম্ভাব্য সংখ্যার মধ্যে Nth নম্বর খুঁজুন এবং যদি Nth নম্বর না পাওয়া যায় তাহলে সারিতে নম্বর পরিবর্তন করুন।

while(true) {
   int x = q.front();
   q.pop();
   for(int j = 0; j < 5; j++) {
      int temp = x * 10 + a[j];
      q.push(temp);
      cnt++;
      if(cnt == n)
         ans = temp;
      }
      if(ans)
         break;
   }
   cout << ans << "\n";
}

অবশেষে, আমরা সারি থেকে প্রতিটি সংখ্যা পপ আউট করছি এবং সেই সূত্র থেকে পরবর্তী সম্ভাব্য সংখ্যা তৈরি করছি { x * 10 + শেষ বিজোড় সংখ্যা } ব্যবহার করে এবং পরীক্ষা করছি cnt-এর মান n-এর সমান হয় কিনা।

উপসংহার

এই নিবন্ধে, আমাদের একটি সমস্যা ছিল:শুধুমাত্র বিজোড় সংখ্যা দ্বারা গঠিত Nth বিজোড় সংখ্যা কীভাবে খুঁজে বের করা যায়, এবং আমরা এটি করার জন্য দুটি পদ্ধতি খুঁজে পেয়েছি। প্রথম পদ্ধতিটি বোঝা সহজ ছিল কারণ এটি কেবল প্রতিটি সংখ্যা পরীক্ষা করছে এবং জোড় সংখ্যাগুলি এড়িয়ে যাচ্ছে, তবে এটি কম্পিউটিংয়ে সময় নিচ্ছিল৷

দ্বিতীয় পদ্ধতিটি ছিল একটি সারি ব্যবহার করা এবং এতে বিজোড় সংখ্যা সংরক্ষণ করা এবং একটি সূত্র দিয়ে পরবর্তী সম্ভাব্য সংখ্যাগুলি খুঁজে বের করা, আমরা উপরে দেখেছি। এই পদ্ধতির জটিলতা হল O(n).

আমরা শুধুমাত্র বিজোড় সংখ্যা দ্বারা গঠিত Nth সংখ্যাগুলি খুঁজে বের করার জন্য C++ এ একটি প্রোগ্রাম তৈরি করেছি; আমরা এই প্রোগ্রামটি অন্য যেকোনো ভাষায় করতে পারি যেমন সি, পাইথন, জাভা বা অন্য কোনো প্রোগ্রামিং ভাষাতে। আশা করি আপনি এই নিবন্ধটি সহায়ক বলে মনে করেছেন কারণ এটি সমস্যা সমাধানের পদ্ধতির সম্পূর্ণ জ্ঞান দেয়৷


  1. C++ ব্যবহার করে পঞ্চভুজ পিরামিডাল নম্বর খুঁজুন

  2. C++ ব্যবহার করে একটি স্ট্রিং এর সাবস্ট্রিং এর সংখ্যা খুঁজুন

  3. C++ ব্যবহার করে স্টপিং স্টেশনের সংখ্যা খুঁজুন

  4. C++ ব্যবহার করে একটি সংখ্যার বিজোড় গুণনীয়কের সমষ্টি খুঁজুন।