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

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

हमें एक पूर्णांक संख्या के साथ दिया गया है, मान लीजिए, N जिसे भाजक माना जाता है और इसे 1 - N से शुरू होने वाली संख्याओं से विभाजित किया जाएगा और कार्य उन भाजक की गिनती की गणना करना है जिनके पास सेट बिट्स की संख्या से अधिक है भागफल को दी गई संख्या 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-> एन =6/3(2) =2(1) =2> 1 =माना जाता है

4-> एन =6 /4(1) =1(1) =1 =1 =माना जाता है

5-> एन =6/5(2) =1(1) =2> 1 =माना जाता है

6-> एन =6/6(2) =1(1) =2>1 =माना जाता है

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

इनपुट - इंट एन =10

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

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

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

2-> एन =10 /2(1) =5(2) =2 =2 =माना जाता है

3-> N =10 /3(2) =3(2) =2 =2 =माना जाता है

4-> एन =10 /4(1) =2(1) =1 <2 =नहीं माना गया

5-> एन =10 /5(2) =2(1) =2> 2 =माना जाता है

6-> एन =10 /6(2) =1(1) =2>1 =माना जाता है

7-> एन =10 /7(3) =1(1) =3>1 =माना जाता है

8-> एन =10 /8(1) =1(1) =1 =1 =माना जाता है

9-> एन =10 /9(2) =1(1) =2> 2 =माना जाता है

10-> एन =10 10(2) =1(1) =2> 1 =माना जाता है

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

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

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

उदाहरण

#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 Flipping one set bit gi

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

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

  1. सी ++ में सेट बिट्स की गिनती के अनुसार एक सरणी को क्रमबद्ध करें

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