কম্পিউটার

C++ এ বাইনারি রিপ্রেজেন্টেশনে সেট বিটের প্রাইম সংখ্যা


এই সমস্যায়, আমাদের দুটি পূর্ণসংখ্যা L এবং R দেওয়া হয়েছে। আমাদের কাজ মোট সংখ্যাগুলিকে প্রিন্ট করার জন্য যা বিট সেট করে একটি মৌলিক সংখ্যা যা L থেকে R এর মধ্যে রয়েছে।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক

Input: L = 7, R = 12
Output: 6
Explanation:
7 -> 111 , set bits = 2, prime number.
8 -> 1000 , set bits = 1, not prime number.
9 -> 1001 , set bits = 2, prime number
10 -> 1010 , set bits = 2, prime number
11 -> 1011, set bits = 3, prime number
12 -> 1100, set bits = 2, prime number

এই সমস্যাটি সমাধান করার জন্য, আমরা পরিসরের মধ্যে প্রতিটি উপাদান অতিক্রম করব। এবং সংখ্যায় সেট বিটের মোট সংখ্যা পরীক্ষা করুন, এর জন্য আমরা CPP _builtin_popcount() এ একটি পূর্বনির্ধারিত ফাংশন ব্যবহার করব। তারপর, আমরা প্রাইমের জন্য সংখ্যার সেট বিটগুলি পরীক্ষা করব। যদি হ্যাঁ গণনা বাড়ান অন্যথায় না।

আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম

উদাহরণ

#include <iostream>
using namespace std;
bool isPrimeNumber(int n) {
   if (n <= 1) return false;
   if (n <= 3) return true;
   if (n%2 == 0 || n%3 == 0) return false;
   for (int i=5; i*i<=n; i=i+6)
   if (n%i == 0 || n%(i+2) == 0)
   return false;
   return true;
}
void printPrimeSetBits(int l, int r) {
   int tot_bit, count = 0;
   for (int i = l; i <= r; i++) {
      tot_bit = __builtin_popcount(i);
      if (isPrimeNumber(tot_bit))
         count++;
   }
   cout<<count;
}
int main() {
   int L = 7, R = 13;
   cout<<"Total numbers with prime set bits between "<<L<<" and "<<R<<" are : ";
   printPrimeSetBits(L, R);
   return 0;
}

আউটপুট

Total numbers with prime set bits between 7 and 13 are : 6

  1. একটি সংখ্যার বিকল্প প্যাটার্নে বিট আছে কিনা তা পরীক্ষা করুন - C++ এ 1 সেট করুন

  2. C++ এ সেট বিটের গণনা অনুসারে একটি অ্যারে সাজান

  3. C++ প্রোগ্রামিং-এ বাইনারি ট্রির প্রতিটি নোডে সেট বিটের সংখ্যা প্রিন্ট করুন।

  4. পাইথনে বাইনারি রিপ্রেজেন্টেশনে সেট বিটের প্রাইম নম্বর