কম্পিউটার

C++ এ [0, n] পরিসরে মাত্র 1 সেট বিট থাকা সংখ্যার সংখ্যা


আমাদের একটি সংখ্যা দেওয়া হয়েছে এবং কাজটি হল 0 পরিসর থেকে প্রদত্ত সংখ্যা পর্যন্ত সংখ্যার গণনা করা, ধরা যাক, সংখ্যার ঠিক এক সেট বিট রয়েছে

একটি বাইনারি সংখ্যার সেট বিটগুলি 1 দ্বারা প্রতিনিধিত্ব করা হয়। যখনই আমরা একটি পূর্ণসংখ্যা মানের বাইনারি সংখ্যা গণনা করি তখন এটি 0 এবং 1 এর সমন্বয় হিসাবে গঠিত হয়। সুতরাং, 1 সংখ্যাটি কম্পিউটারের পরিভাষায় সেট বিট হিসাবে পরিচিত।

ইনপুট − int num =15

আউটপুট − পরিসরে [0, 15] মাত্র 1 সেট বিট আছে এমন সংখ্যার সংখ্যা হল −4

ব্যাখ্যা − প্রদত্ত সংখ্যাটি 15 তাই পরিসীমা হল 0-15৷ এখন 4 সংখ্যা গণনা করুন

এর জন্য বাইনারি সংখ্যা

0 -> 0000 =0 সেট বিট, 1 -> 0001 =1 সেট বিট, 2 -> 0010 =1 সেট বিট, 3 -> 0011 =2 সেট বিট, 4 -> 0100 =1 সেট বিট, 5 -> 0101 =2 সেট বিট, 6 -> 0110 =2 সেট বিট, 7 -> 0111 =3 সেট বিট, 8 -> 1000 =1 সেট বিট, 1 -> 1001 =2 সেট বিট, 10 -> 1010 =2 সেট বিট, 11 -> 1011 =3 সেট বিট, 12 -> 1100 =2 সেট বিট, 13 -> 1101 =3 সেট বিট, 14 -> 1110 =3 সেট বিট, 15 -> 1111 =4 সেট বিট। এখন, আমরা ঠিক একটি সেট বিট সহ সংখ্যাগুলি বেছে নেব এবং সেগুলি হল 1, 2, 4 এবং 8৷

ইনপুট − int num =4

আউটপুট − পরিসরে [0, 15] মাত্র 1 সেট বিট বিশিষ্ট সংখ্যার সংখ্যা হল −3

ব্যাখ্যা − প্রদত্ত সংখ্যাটি 4 তাই পরিসীমা হল 0-4। এখন 4 সংখ্যার বাইনারি গণনা করুন

এর জন্য সংখ্যা

0 -> 0000 =0 সেট বিট, 1 -> 0001 =1 সেট বিট, 2 -> 0010 =1 সেট বিট, 3 -> 0011 =2 সেট বিট, 4 -> 0100 =1 সেট বিট। এখন, আমরা ঠিক একটি সেট বিট সহ সংখ্যাগুলি বেছে নেব এবং সেগুলি হল 1, 2 এবং 4৷

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

প্রদত্ত সমস্যা সমাধানের জন্য একাধিক পন্থা হতে পারে যেমন নিষ্পাপ দৃষ্টিভঙ্গি এবং দক্ষ পদ্ধতি। তাই আসুন প্রথমে নিষ্পাপ পদ্ধতির দিকে তাকাই .

  • নম্বরটি ইনপুট করুন এবং আরও প্রক্রিয়াকরণের জন্য এটিকে ফাংশনে প্রেরণ করুন।

  • ঠিক 1 হিসাবে সেট বিট সহ পরিসরে সংখ্যার গণনা সংরক্ষণ করতে একটি অস্থায়ী পরিবর্তনশীল গণনা নিন

  • i থেকে 1 নম্বর পর্যন্ত FOR লুপ শুরু করুন

  • লুপের ভিতরে, ' __builtin_popcount(i)' সহ একটি টেম্প ভেরিয়েবল সেট করুন, যে ফাংশনটি সেট বিটের সংখ্যা প্রদান করে।

  • IF temp =1 চেক করুন তারপর গণনা বৃদ্ধি করুন

  • রিটার্ন গণনা

  • প্রিন্ট ফলাফল

দক্ষ পদ্ধতি

  • নম্বরটি ইনপুট করুন এবং আরও প্রক্রিয়াকরণের জন্য এটিকে ফাংশনে প্রেরণ করুন।

  • ঠিক 1 হিসাবে সেট বিট সহ পরিসরে সংখ্যার গণনা সংরক্ষণ করতে একটি অস্থায়ী পরিবর্তনশীল গণনা নিন

  • স্টার্ট লুপ যখন টেম্প থেকে টেম্প পর্যন্ত <=সংখ্যা

  • লুপের ভিতরে, গণনা 1 দ্বারা বৃদ্ধি করুন এবং temp * 2

    হিসাবে সেট করুন
  • রিটার্ন গণনা

  • প্রিন্ট ফলাফল

উদাহরণ (নিষ্পাপ পদ্ধতি)

#include <iostream>
using namespace std;
//function to Count of numbers having only 1 set bit in the range [0, n]
int set_bits(int number){
   int count = 0;
   for (int i = 1; i <= number; i++){
      int temp = __builtin_popcount(i);
      if (temp == 1){
         count++;
      }
   }
   return count;
}
int main(){
   int number = 15;
   cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Count of numbers having only 1 set bit in the range [0, 15] are: 4

উদাহরণ (দক্ষ পদ্ধতি)

#include <iostream>
using namespace std;
//function to Count of numbers having only 1 set bit in the range [0, n]
int set_bits(int number){
   int count = 0;
   int temp = 1;
   while(temp <= number){
      count++;
      temp = temp *2;
   }
   return count;
}
int main(){
   int number = 15;
   cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Count of numbers having only 1 set bit in the range [0, 15] are: 4

  1. C++ এ [l, r] পরিসরে ASCII মান সহ বর্ণমালা গণনা করুন এবং মুদ্রণ করুন

  2. C++ এ একটি প্রদত্ত পরিসরে ফ্যাক্টরিয়াল সংখ্যা গণনা করুন

  3. C++ এ K হিসাবে ক্ষুদ্রতম ফ্যাক্টর সহ একটি পরিসরে সমস্ত সংখ্যা গণনা করুন

  4. শুধুমাত্র সংখ্যা 3 এবং 4 ব্যবহার করে এবং C++-এ সর্বাধিক N-এ দৈর্ঘ্য থাকা সংখ্যাগুলির গণনা খুঁজুন