Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में N को विभाजित करने पर भागफल से अधिक सेट बिट्स वाले भाजकों की गिनती


हमें एक पूर्णांक संख्या दी गई है मान लीजिए, N जिसे भाजक माना जाता है और इसे 1 - N से शुरू होने वाली संख्याओं से विभाजित किया जाएगा और कार्य उन भाजकों की संख्या की गणना करना है जिनमें दी गई संख्या N से विभाजित होने पर भागफल से अधिक सेट बिट्स हों।

उदाहरण के लिए

इनपुट - int N = 6

आउटपुट - N को विभाजित करने पर भागफल से अधिक सेट बिट्स वाले भाजकों की संख्या: 5

व्याख्या - सबसे पहले, हम संख्या N को 1 - N से शुरू होने वाली संख्याओं से विभाजित करेंगे और भाजक और भागफल के सेट बिट्स की गणना करेंगे यानी

1-> N = 6 /1(1) = 6(2) = 1 < 2 = विचार नहीं किया गया

2-> N = 6 /2(1) = 3(2) = 2 = 2 = विचार किया गया

3-> N = 6 /3(2) = 2(1) = 2 > 1 = विचार किया गया

4-> N = 6 /4(1) = 1(1) = 1 = 1 = विचार किया गया

5-> N = 6 /5(2) = 1(1) = 2 > 1 = विचार किया गया

6-> N = 6 /6(2) = 1(1) = 2 >1 = विचार किया गया

जैसा कि हम देख सकते हैं, हम विचार किए गए मामले लेंगे और आउटपुट 5 होगा।

इनपुट - int N = 10

आउटपुट - N को विभाजित करने पर भागफल से अधिक सेट बिट्स वाले भाजकों की संख्या: 8 

व्याख्या - सबसे पहले, हम संख्या N को 1 - N से शुरू होने वाली संख्याओं से विभाजित करेंगे और भाजक और भागफल के सेट बिट्स की गणना करेंगे यानी

1-> N = 10 /1(1) = 10(2) = 1 < 2 = विचार नहीं किया गया

2-> N = 10 /2(1) = 5(2) = 2 = 2 = विचार किया गया

3-> N = 10 /3(2) = 3(2) = 2 = 2 = विचार किया गया

4-> N = 10 /4(1) = 2(1) = 1 < 2 = विचार नहीं किया गया

5-> N = 10 /5(2) = 2(1) = 2 > 2 = विचार किया गया

6-> N = 10 /6(2) = 1(1) = 2 >1 = विचार किया गया

7-> N = 10 /7(3) = 1(1) = 3 >1 = विचार किया गया

8-> N = 10 /8(1) = 1(1) = 1 = 1 = विचार किया गया

9-> N = 10 /9(2) = 1(1) = 2 > 2 = विचार किया गया

10-> N = 10 /10(2) = 1(1) = 2 > 1 = विचार किया गया

जैसा कि हम देख सकते हैं, हम विचार किए गए मामले लेंगे और आउटपुट 8 होगा।

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

  • एक धनात्मक पूर्णांक संख्या N इनपुट करें और इसे फ़ंक्शन divisors_quotient() में तर्क के रूप में पास करें।
  • फ़ंक्शन divisors_quotient() के अंदर
    • N - फ़ंक्शन set_quo(N) को कॉल + 1 लौटाएं और फ़ंक्शन set_quo() पर जाएं
  • फ़ंक्शन set_quo() के अंदर
    • एक अस्थायी वेरिएबल start और end बनाएं और start को 1 और end को sqrt(N) से इनिशियलाइज़ करें।
    • start < end तक WHILE लूप शुरू करें और एक अस्थायी वेरिएबल temp बनाएं और इसे (start + end) / 2 सेट करें
    • चेक करें IF(verify() फ़ंक्शन को कॉल करें और temp और N को तर्क के रूप में पास करें) तो end को temp सेट करें
    • अन्यथा, start को temp + 1 सेट करें
    • IF(!verify() फ़ंक्शन को कॉल करें और temp और N को तर्क के रूप में पास करें) तो start + 1 लौटाएं।
    • अन्यथा, start लौटाएं
  • फ़ंक्शन verify() के अंदर 
    • चेक करें IF(फ़ंक्शन val_bit(temp/val) कॉल फ़ंक्शन val_bit(val) से कम है) तो true लौटाएं अन्यथा false लौटाएं
  • फ़ंक्शन val_bit() के अंदर
    • परिणाम संग्रहीत करने के लिए एक अस्थायी वेरिएबल count घोषित करें।
    • val के मान होने तक WHILE लूप शुरू करें। लूप के अंदर, val को val / 2 सेट करें और count को 1 से बढ़ाएं।
    • count लौटाएं। 

उदाहरण

#include <bits/stdc++.h> using namespace std; int val_bit(int val) {    int count = 0;    while (val) {       val = val / 2;       count++;    }    return count; } bool verify(int val, int temp) {    if (val_bit(temp / val) <= val_bit(val)) {       return true;    }    return false; } int set_quo(int N) {    int start = 1;    int end = sqrt(N);    while (start < end) {       int temp = (start + end) / 2;       if (verify(temp, N)) {          end = temp;       } else {          start = temp + 1;       }    }    if (!verify(start, N)) {       return start + 1;    } else {       return start;    } } int divisors_quotient(int N) {    return N - set_quo(N) + 1; } int main() {    int N = 10;    cout << "Count of divisors having more set bits than quotient on dividing N are: " << divisors_quotient(N);    return 0; }

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -

आउटपुट

Count of divisors having more set bits than quotient on dividing N are: 8

  1. - C++ में एक सेट बिट कम वाली पिछली छोटी पूर्णांक

    इस समस्या में, हमें एक इंटीजर n दिया गया है। हमारा कार्य n से कम सबसे बड़ी संख्या प्रिंट करना है जिसे संख्या के बाइनरी प्रतिनिधित्व के एक सेट बिट को बदलकर बनाया जा सकता है।समस्या को समझने के लिए एक उदाहरण लेते हैंInput: n = 3 Output: 2 Explanation: (3)10 = (011)2 एक सेट बिट फ्लिप करने पर 001 और 010

  1. - C++ में एक रेंज में सेट बिट्स कॉपी करना

    इस ट्यूटोरियल में, हम दी गई रेंज में एक संख्या के सेट बिट्स को दूसरी संख्या में कॉपी करने के लिए एक प्रोग्राम पर चर्चा करेंगे।इसके लिए हमें दो पूर्णांक प्रदान किए जाएंगे। हमारा कार्य पहली संख्या में बिट्स देखना और उन बिट्स को दूसरी संख्या में भी सेट करना है यदि वे दी गई रेंज में हैं। अंत में उत्पन्न

  1. - C++ में सेट बिट्स की संख्या के अनुसार ऐरे सॉर्ट करें

    यहां हम सेट-बिट्स के आधार पर ऐरे को सॉर्ट करने की एक दिलचस्प समस्या देखेंगे। जब ऐरे में किसी एलिमेंट में अधिक सेट-बिट्स होते हैं, तो उसे उस एलिमेंट से पहले रखा जाएगा जिसमें कम सेट बिट्स होते हैं। मान लीजिए कुछ नंबर्स हैं 12, 15, 7। तो सेट बिट्स मूल रूप से उनके बाइनरी प्रतिनिधित्व में 1s की संख्या है