Egyenlő összeg és XOR

Egyenlő összeg és XOR
Próbáld ki a GfG Practice-n #practiceLinkDiv { display: none !important; }

Adott n pozitív egész szám, keresse meg az i pozitív egészek számát úgy, hogy 0 <= i <= n and n+i = n^i 

Példák:  

  Input :   n = 7   Output   : 1   Explanation:   7^i = 7+i holds only for only for i = 0 7+0 = 7^0 = 7   Input:   n = 12   Output:   4 12^i = 12+i hold only for i = 0 1 2 3 for i=0 12+0 = 12^0 = 12 for i=1 12+1 = 12^1 = 13 for i=2 12+2 = 12^2 = 14 for i=3 12+3 = 12^3 = 15 
Recommended Practice Egyenlő összeg és XOR Próbáld ki!

1. módszer (Egyszerű):  
Az egyik egyszerű megoldás az i 0 összes értékének iterálása <= i <= n and count all satisfying values.  

C++
   /* C++ program to print count of values such    that n+i = n^i */   #include          using     namespace     std  ;   // function to count number of values less than   // equal to n that satisfy the given condition   int     countValues     (  int     n  )   {      int     countV     =     0  ;      // Traverse all numbers from 0 to n and      // increment result only when given condition      // is satisfied.      for     (  int     i  =  0  ;     i   <=  n  ;     i  ++     )      if     ((  n  +  i  )     ==     (  n  ^  i  )     )      countV  ++  ;      return     countV  ;   }   // Driver program   int     main  ()   {      int     n     =     12  ;      cout      < <     countValues  (  n  );      return     0  ;   }   
Java
   /* Java program to print count of values    such that n+i = n^i */   import     java.util.*  ;   class   GFG     {          // function to count number of values       // less than equal to n that satisfy      // the given condition      public     static     int     countValues     (  int     n  )      {      int     countV     =     0  ;          // Traverse all numbers from 0 to n       // and increment result only when       // given condition is satisfied.      for     (  int     i     =     0  ;     i      <=     n  ;     i  ++     )      if     ((  n     +     i  )     ==     (  n     ^     i  )     )      countV  ++  ;          return     countV  ;      }          /* Driver program to test above function */      public     static     void     main  (  String  []     args  )         {      int     n     =     12  ;      System  .  out  .  println  (  countValues  (  n  ));          }   }   // This code is contributed by Arnav Kr. Mandal.   
Python3
   # Python3 program to print count   # of values such that n+i = n^i   # function to count number   # of values less than   # equal to n that satisfy    # the given condition   def   countValues   (  n  ):   countV   =   0  ;   # Traverse all numbers   # from 0 to n and   # increment result only   # when given condition   # is satisfied.   for   i   in   range  (  n   +   1  ):   if   ((  n   +   i  )   ==   (  n   ^   i  )):   countV   +=   1  ;   return   countV  ;   # Driver Code   n   =   12  ;   print  (  countValues  (  n  ));   # This code is contributed by mits   
C#
   /* C# program to print count of values   such that n+i = n^i */   using     System  ;   class     GFG     {          // function to count number of values       // less than equal to n that satisfy      // the given condition      public     static     int     countValues     (  int     n  )      {      int     countV     =     0  ;          // Traverse all numbers from 0 to n       // and increment result only when       // given condition is satisfied.      for     (  int     i     =     0  ;     i      <=     n  ;     i  ++     )      if     ((  n     +     i  )     ==     (  n     ^     i  )     )      countV  ++  ;          return     countV  ;      }          /* Driver program to test above function */      public     static     void     Main  ()         {      int     n     =     12  ;      Console  .  WriteLine  (  countValues  (  n  ));          }   }   // This code is contributed by anuj_67.   
PHP
      // PHP program to print count   // of values such that n+i = n^i   // function to count number   // of values less than   // equal to n that satisfy    // the given condition   function   countValues   (  $n  )   {   $countV   =   0  ;   // Traverse all numbers   // from 0 to n and   // increment result only   // when given condition   // is satisfied.   for   (  $i   =   0  ;   $i    <=   $n  ;   $i  ++   )   if   ((  $n   +   $i  )   ==   (  $n  ^  $i  )   )   $countV  ++  ;   return   $countV  ;   }   // Driver Code   $n   =   12  ;   echo   countValues  (  $n  );   // This code is contributed by m_kit   ?>   
JavaScript
    <  script  >   /* JavaScript program to print count of values such   that n+i = n^i */   // function to count number of values less than   // equal to n that satisfy the given condition   function     countValues     (  n  )   {      let     countV     =     0  ;      // Traverse all numbers from 0 to n and      // increment result only when given condition      // is satisfied.      for     (  let     i  =  0  ;     i   <=  n  ;     i  ++     )      if     ((  n  +  i  )     ==     (  n  ^  i  )     )      countV  ++  ;      return     countV  ;   }   // Driver program      let     n     =     12  ;      document  .  write  (  countValues  (  n  ));   // This code is contributed by Surbhi Tyagi.    <  /script>   

Kimenet:  

4 

Időbeli összetettség: On)

A tér összetettsége: O(1)

2. módszer (Hatékony): 
A hatékony megoldás a következő

tudjuk, hogy (n+i)=(n^i)+2*(n&i)
Tehát n + i = n ^ i azt jelenti, hogy n & i = 0
Ezért a problémánk az i értékeinek megtalálására redukálódik úgy, hogy n & i = 0. Hogyan találjuk meg az ilyen párok számát? Használhatjuk az unset-bitek számát n bináris ábrázolásában. Ahhoz, hogy n & i nulla legyen, hatástalanítanom kell n összes set-bitjét. Ha a k-adik bit egy adott n-ben van beállítva k-adik bit az i-ben, mindig 0-nak kell lennie, különben az i k-edik bitje lehet 0 vagy 1
Ezért az ilyen kombinációk teljes száma 2^ (a beállított bitek száma n-ben)
Például vegyük n = 12-t (Bináris reprezentáció: 1 1 0 0). 
Az i összes lehetséges értéke, amely hatástalaníthatja n összes bitjét, 0 0 0/1 0/1, ahol a 0/1 0-t vagy 1-et jelent. Az i ilyen értékeinek száma 2^2 = 4. 

Az alábbi program a fenti gondolatot követi.  

C++
   /* c++ program to print count of values such    that n+i = n^i */   #include          using     namespace     std  ;   // function to count number of values less than   // equal to n that satisfy the given condition   int     countValues  (  int     n  )   {      // unset_bits keeps track of count of un-set      // bits in binary representation of n      int     unset_bits  =  0  ;      while     (  n  )      {      if     ((  n     &     1  )     ==     0  )      unset_bits  ++  ;      n  =  n  >>  1  ;      }      // Return 2 ^ unset_bits      return     1      < <     unset_bits  ;   }   // Driver code   int     main  ()   {      int     n     =     12  ;      cout      < <     countValues  (  n  );      return     0  ;   }   
Java
   /* Java program to print count of values    such that n+i = n^i */   import     java.util.*  ;   class   GFG     {          // function to count number of values       // less than equal to n that satisfy       // the given condition      public     static     int     countValues  (  int     n  )      {      // unset_bits keeps track of count      // of un-set bits in binary       // representation of n      int     unset_bits  =  0  ;      while     (  n     >     0  )      {      if     ((  n     &     1  )     ==     0  )      unset_bits  ++  ;      n  =  n  >>  1  ;      }          // Return 2 ^ unset_bits      return     1      < <     unset_bits  ;      }          /* Driver program to test above    function */      public     static     void     main  (  String  []     args  )         {      int     n     =     12  ;      System  .  out  .  println  (  countValues  (  n  ));          }   }       // This code is contributed by Arnav Kr. Mandal.   
C#
   /* C# program to print count of values    such that n+i = n^i */   using     System  ;   public     class     GFG     {          // function to count number of values       // less than equal to n that satisfy       // the given condition      public     static     int     countValues  (  int     n  )      {          // unset_bits keeps track of count      // of un-set bits in binary       // representation of n      int     unset_bits  =  0  ;      while     (  n     >     0  )      {      if     ((  n     &     1  )     ==     0  )      unset_bits  ++  ;      n  =  n  >>  1  ;      }          // Return 2 ^ unset_bits      return     1      < <     unset_bits  ;      }          /* Driver program to test above    function */      public     static     void     Main  (  String  []     args  )         {      int     n     =     12  ;      Console  .  WriteLine  (  countValues  (  n  ));          }   }   // This code is contributed by umadevi9616   
Python3
   # Python3 program to print count of values such    # that n+i = n^i    # function to count number of values less than    # equal to n that satisfy the given condition    def   countValues  (  n  ):   # unset_bits keeps track of count of un-set    # bits in binary representation of n   unset_bits   =   0   while  (  n  ):   if   n   &   1   ==   0  :   unset_bits   +=   1   n   =   n   >>   1   # Return 2 ^ unset_bits    return   1    < <   unset_bits   # Driver code    if   __name__  ==  '__main__'  :   n   =   12   print  (  countValues  (  n  ))   # This code is contributed by rutvik   
PHP
      /* PHP program to print count    of values such that n+i = n^i */   // function to count number of    // values less than equal to n    // that satisfy the given    // condition   function   countValues  (   $n  )   {   // unset_bits keeps track    // of count of un-set bits    // in binary representation   // of n   $unset_bits   =   0  ;   while   (  $n  )   {   if   ((  $n   &   1  )   ==   0  )   $unset_bits  ++  ;   $n   =   $n   >>   1  ;   }   // Return 2 ^ unset_bits   return   1    < <   $unset_bits  ;   }   // Driver code   $n   =   12  ;   echo   countValues  (  $n  );   // This code is contributed   // by Anuj_67.   ?>   
JavaScript
    <  script  >   // Javascript program to print count of values   // such that n+i = n^i   // Function to count number of values   // less than equal to n that satisfy   // the given condition   function     countValues  (  n  )   {          // unset_bits keeps track of count      // of un-set bits in binary      // representation of n      let     unset_bits     =     0  ;          while     (  n     >     0  )      {      if     ((  n     &     1  )     ==     0  )      unset_bits  ++  ;          n     =     n     >>     1  ;      }          // Return 2 ^ unset_bits      return     1      < <     unset_bits  ;   }       // Driver Code   let     n     =     12  ;   document  .  write  (  countValues  (  n  ));       // This code is contributed by susmitakundugoaldanga        <  /script>   

Kimenet:  

4 

Időbeli összetettség: O(log(n))

A tér összetettsége: O(1)

https://www.youtube.com/watch?v=zhu605v9KOI&feature=youtu.be

 

Kvíz létrehozása