📌  相关文章
📜  要使XOR最大的要删除的最小元素数

📅  最后修改于: 2021-05-07 00:26:51             🧑  作者: Mango

给定一个数字N在哪里, 1\leq N\leq 10^{18} 。任务是找到之间要删除的最小元素数1N使得从其余元素获得的XOR最大。

例子

Input: N = 5
Output: 2

Input: 1000000000000000
Output: 1

方法:考虑以下情况:

下面是上述方法的实现:

C++
// C++ implementation to find minimum number of
// elements to remove to get maximum XOR value
#include 
using namespace std;
  
unsigned int nextPowerOf2(unsigned int n)
{
    unsigned count = 0;
  
    // First n in the below condition
    // is for the case where n is 0
    if (n && !(n & (n - 1)))
        return n;
  
    while (n != 0) {
        n >>= 1;
        count += 1;
    }
  
    return 1 << count;
}
  
// Function to find minimum number of
// elements to be removed.
int removeElement(unsigned int n)
{
  
    if (n == 1 || n == 2)
        return 0;
  
    unsigned int a = nextPowerOf2(n);
  
    if (n == a || n == a - 1)
        return 1;
  
    else if (n == a - 2)
        return 0;
  
    else if (n % 2 == 0)
        return 1;
  
    else
        return 2;
}
  
// Driver code
int main()
{
    unsigned int n = 5;
  
    // print minimum number of elements
    // to be removed
    cout << removeElement(n);
  
    return 0;
}


Java
//Java implementation to find minimum number of
//elements to remove to get maximum XOR value
public class GFG {
  
    static int nextPowerOf2(int n)
    {
     int count = 0;
  
     // First n in the below condition
     // is for the case where n is 0
     if (n!=0 && (n& (n - 1))==0)
         return n;
  
     while (n != 0) {
         n >>= 1;
         count += 1;
     }
  
     return 1 << count;
    }
  
    //Function to find minimum number of
    //elements to be removed.
    static int removeElement(int n)
    {
  
     if (n == 1 || n == 2)
         return 0;
  
     int a = nextPowerOf2(n);
  
     if (n == a || n == a - 1)
         return 1;
  
     else if (n == a - 2)
         return 0;
  
     else if (n % 2 == 0)
         return 1;
  
     else
         return 2;
    }
  
    //Driver code
    public static void main(String[] args) {
          
         int n = 5;
  
         // print minimum number of elements
         // to be removed
         System.out.println(removeElement(n));
    }
}


Python 3
# Python 3 to find minimum number 
# of elements to remove to get 
# maximum XOR value
  
def nextPowerOf2(n) :
    count = 0
  
    # First n in the below condition 
    # is for the case where n is 0 
    if (n and not(n and (n - 1))) :
        return n
  
    while n != 0 :
        n >>= 1
        count += 1
  
    return 1 << count
  
# Function to find minimum number 
# of elements to be removed. 
def removeElement(n) :
  
    if n == 1 or n == 2 :
        return 0
  
    a = nextPowerOf2(n)
      
    if n == a or n == a - 1 :
        return 1
  
    elif n == a - 2 :
        return 0
  
    elif n % 2 == 0 :
        return 1
  
    else :
        return 2
      
# Driver Code
if __name__ == "__main__" :
  
    n = 5
  
    # print minimum number of 
    # elements to be removed 
    print(removeElement(n))
  
# This code is contributed 
# by ANKITRAI1


C#
//C# implementation to find minimum number of
//elements to remove to get maximum XOR value
  
using System;
public class GFG {
   
    static int nextPowerOf2(int n)
    {
     int count = 0;
   
     // First n in the below condition
     // is for the case where n is 0
     if (n!=0 && (n& (n - 1))==0)
         return n;
   
     while (n != 0) {
         n >>= 1;
         count += 1;
     }
   
     return 1 << count;
    }
   
    //Function to find minimum number of
    //elements to be removed.
    static int removeElement(int n)
    {
   
     if (n == 1 || n == 2)
         return 0;
   
     int a = nextPowerOf2(n);
   
     if (n == a || n == a - 1)
         return 1;
   
     else if (n == a - 2)
         return 0;
   
     else if (n % 2 == 0)
         return 1;
   
     else
         return 2;
    }
   
    //Driver code
    public static void Main() {
           
         int n = 5;
   
         // print minimum number of elements
         // to be removed
         Console.Write(removeElement(n));
    }
}


PHP
>= 1;
        $count += 1;
    }
  
    return 1 << $count;
}
  
// Function to find minimum number 
// of elements to be removed.
function removeElement($n)
{
  
    if ($n == 1 || $n == 2)
        return 0;
  
    $a = nextPowerOf2($n);
  
    if ($n == $a || $n == $a - 1)
        return 1;
  
    else if ($n == $a - 2)
        return 0;
  
    else if ($n % 2 == 0)
        return 1;
  
    else
        return 2;
}
  
// Driver code
$n = 5;
  
// print minimum number of 
// elements to be removed
echo removeElement($n);
  
// This code is contributed by mits
?>


输出:
2

时间复杂度: O(logn)