इस समस्या में, हमें दो पूर्णांक 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
इस समस्या को हल करने के लिए, हम सीमा के भीतर प्रत्येक तत्व को पार करेंगे। और संख्या में सेट बिट्स की कुल संख्या की जांच करें, इसके लिए हम सीपीपी _बिल्टिन_पॉपकाउंट () में एक पूर्वनिर्धारित फ़ंक्शन का उपयोग करेंगे। फिर, हम प्राइम के लिए संख्या के सेट बिट्स की जांच करेंगे। यदि हाँ तो गिनती बढ़ाएँ अन्यथा नहीं।
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम
उदाहरण
#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