# Maximize the largest number K such that bitwise and of K till N is 0

• Difficulty Level : Hard
• Last Updated : 14 Sep, 2021

Given an integer N, the task is to find the maximum value of K such that N & (N-1) & (N-2) & … & (K) = 0. Here & represents bitwise AND operator.

Example:

Input: N = 5
Output: 3
Explanation: The value of the expression 5 & 4 & 3 = 0. any value greater than 3 (example 4) will not satisfy
our given condition

Input: N =17
Output: 15

Naive approach: The brute force approach is to start from N-1 and perform bitwise AND operation till we get 0.

Below is the implementation of the above approach:

## C++

 `// C++ program for above approach` `#include ` `using` `namespace` `std;`   `// Function to find maximum value of k` `// which makes bitwise AND zero.` `int` `findMaxK(``int` `N)` `{` `    ``// Take k = N initially` `    ``int` `K = N;`   `    ``// Start traversing from N-1 till 0` `    ``for` `(``int` `i = N - 1; i >= 0; i--) {` `        ``K &= i;`   `        ``// Whenever we get AND as 0` `        ``// we stop and return` `        ``if` `(K == 0) {` `            ``return` `i;` `        ``}` `    ``}` `    ``return` `0;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 5;` `    ``cout << findMaxK(N);` `}`

## Java

 `// Java program for the above approach`   `import` `java.io.*;`   `class` `GFG {` `  ``// Function to find maximum value of k` `// which makes bitwise AND zero.` `static` `int` `findMaxK(``int` `N)` `{` `    ``// Take k = N initially` `    ``int` `K = N;`   `    ``// Start traversing from N-1 till 0` `    ``for` `(``int` `i = N - ``1``; i >= ``0``; i--) {` `        ``K &= i;`   `        ``// Whenever we get AND as 0` `        ``// we stop and return` `        ``if` `(K == ``0``) {` `            ``return` `i;` `        ``}` `    ``}` `    ``return` `0``;` `}` `// Driver Code` `    ``public` `static` `void` `main (String[] args) {` `       ``int` `N = ``5``;` `        ``System.out.println(findMaxK(N));` `    ``}` `}` `// This code is contributed by Potta Lokesh`

## Python3

 `# Python 3 program for above approach`   `# Function to find maximum value of k` `# which makes bitwise AND zero.` `def` `findMaxK(N):` `    ``# Take k = N initially` `    ``K ``=` `N`   `    ``# Start traversing from N-1 till 0` `    ``i ``=` `N``-``1` `    ``while``(i >``=` `0``):` `        ``K &``=` `i`   `        ``# Whenever we get AND as 0` `        ``# we stop and return` `        ``if` `(K ``=``=` `0``):` `            ``return` `i` `        ``i ``-``=` `1` `    ``return` `0`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    ``N ``=` `5` `    ``print``(findMaxK(N))`   `    ``# This code is contributed by ipg2016107.`

## C#

 `// C# program for the above approach` `using` `System;`   `class` `GFG` `{`   `  ``// Function to find maximum value of k` `  ``// which makes bitwise AND zero.` `  ``static` `int` `findMaxK(``int` `N)` `  ``{`   `    ``// Take k = N initially` `    ``int` `K = N;`   `    ``// Start traversing from N-1 till 0` `    ``for` `(``int` `i = N - 1; i >= 0; i--) {` `      ``K &= i;`   `      ``// Whenever we get AND as 0` `      ``// we stop and return` `      ``if` `(K == 0) {` `        ``return` `i;` `      ``}` `    ``}` `    ``return` `0;` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `Main (String[] args)` `  ``{` `    ``int` `N = 5;` `    ``Console.Write(findMaxK(N));` `  ``}` `}`   `// This code is contributed by shivanisinghss2110`

## Javascript

 `  ```

Output

`3`

Time complexity: O(N)
Auxiliary Space: O(1)

Efficient approach: By some observation, it can be seen that the answer is always equal to the highest power of 2, which is less than or equal to (N-1). So finally, the answer is always equal to 2^K -1, where K is some value.

Below is the implementation of the above approach:

## C++

 `// C++ program for above approach` `#include ` `using` `namespace` `std;`   `// Function to find maximum value of k` `// which makes bitwise AND zero.` `int` `findMaxK(``int` `N)` `{` `    ``// Finding the power less than N` `    ``int` `p = log2(N);` `    ``return` `pow``(2, p);` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 5;` `    ``cout << findMaxK(N) - 1 << endl;` `    ``return` `0;` `}`

## Java

 `/*package whatever //do not write package name here */` `import` `java.io.*;`   `class` `GFG {`   `    ``// Function to find maximum value of k` `    ``// which makes bitwise AND zero.` `    ``static` `int` `findMaxK(``int` `N)` `    ``{` `        ``// Finding the power less than N` `        ``int` `p = (``int``)(Math.log(N) / Math.log(``2``));` `        ``return` `(``int``)Math.pow(``2``, p);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `N = ``5``;` `        ``System.out.println(findMaxK(N) - ``1``);` `    ``}` `}`   `// This code is contributed by maddler.`

## Python3

 `import` `math`   `# Function to find maximum value of k` `# which makes bitwise AND zero.` `def` `findMaxK(N):` `  `  `    ``# Finding the power less than N` `    ``p ``=` `math.log(N) ``/``/` `math.log(``2``);` `    ``return` `int``(``pow``(``2``, p));`   `# Driver Code` `N ``=` `5``;` `print``(findMaxK(N) ``-` `1``);`   `# This code is contributed by _saurabh_jaiswal `

## C#

 `/*package whatever //do not write package name here */` `using` `System;`   `class` `GFG` `{`   `    ``// Function to find maximum value of k` `    ``// which makes bitwise AND zero.` `    ``static` `int` `findMaxK(``int` `N)` `    ``{` `      `  `        ``// Finding the power less than N` `        ``int` `p = (``int``)(Math.Log(N) / Math.Log(2));` `        ``return` `(``int``)Math.Pow(2, p);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main(String[] args)` `    ``{` `        ``int` `N = 5;` `        ``Console.Write(findMaxK(N) - 1);` `    ``}` `}`   `// This code is contributed by shivanisinghss2110`

## Javascript

 ``

Output

`3`

Time complexity: O(log N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :