यहां, हमें एक प्रोग्राम लिखने की जरूरत है जो यह जांचने के लिए प्रयोग किया जाता है कि दी गई संख्या 3 का गुणज है या नहीं।
एक सामान्य समाधान एक तुच्छ समाधान है, जिसमें संख्या के सभी अंकों को जोड़ा जाता है और यदि योग तीन का गुणज है तो संख्या 3 से विभाज्य है अन्यथा नहीं। लेकिन यह समाधान सबसे कुशल नहीं है।
एक कुशल समाधान संख्या के द्विआधारी प्रतिनिधित्व में बिट काउंट का उपयोग करना होगा। यदि विषम स्थिति में सेट बिट्स की संख्या और सम स्थिति पर सेट बिट्स की संख्या के बीच का अंतर 3 का गुणज है तो संख्या 3 का गुणज है।
हम एक लूप का उपयोग करेंगे और संख्या के बिट्स को शिफ्ट करेंगे और उन बिट्स की संख्या गिनेंगे जो सम और विषम स्थिति हैं। अंत में, यदि अंतर तीन का गुणक है, तो हम चेक वापस कर देंगे।
कार्यान्वयन को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
n = 24
आउटपुट
even
स्पष्टीकरण
binary representation = 11000 Evensetbits = 1 , oddsetbits = 1. Difference = 0, it is divisible.
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
उदाहरण
#include <bits/stdc++.h> using namespace std; int isDivisibleBy3(int n) { int oddBitCount = 0; int evenBitCount = 0; if (n < 0) n = -n; if (n == 0) return 1; if (n == 1) return 0; while (n) { if (n & 1) oddBitCount++; if (n & 2) evenBitCount++; n = n >> 2; } return isDivisibleBy3(oddBitCount - evenBitCount); } int main() { int n = 1241; cout<<"The number "<<n; if (isDivisibleBy3(n)) cout<<" is a multiple of 3"; else cout<<" is not a multiple of 3"; return 0; }
आउटपुट
The number 1241 is not a multiple of 3