আমাদের একটি সংখ্যা দেওয়া হয়েছে এবং কাজটি হল 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