Print bitwise AND set of a number N
Last Updated :
02 Aug, 2023
Given a number N, print all the numbers which are a bitwise AND set of the binary representation of N. Bitwise AND set of a number N is all possible numbers x smaller than or equal N such that N & i is equal to x for some number i.
Examples :
Input : N = 5
Output : 0, 1, 4, 5
Explanation: 0 & 5 = 0
1 & 5 = 1
2 & 5 = 0
3 & 5 = 1
4 & 5 = 4
5 & 5 = 5
So we get 0, 1, 4 and 5 in the
bitwise subsets of N.
Input : N = 9
Output : 0, 1, 8, 9
Simple Approach: A naive approach is to iterate from all numbers from 0 to N and check if (N&i == i). Print the numbers which satisfy the specified condition.
Below is the implementation of above idea:
C++
// CPP program to print all bitwise
// subsets of N (Naive approach)
#include <bits/stdc++.h>
using namespace std;
// function to find bitwise subsets
// Naive approach
void printSubsets(int n) {
for (int i = 0; i <= n; i++)
if ((n & i) == i)
cout << i << " ";
}
// Driver Code
int main() {
int n = 9;
printSubsets(n);
return 0;
}
Java
// JAVA program to print all bitwise
// subsets of N (Naive approach)
class GFG {
// function to find bitwise subsets
// Naive approach
static void printSubsets(int n)
{
for (int i = 0; i <= n; i++)
if ((n & i) == i)
System.out.print(i + " ");
}
// Driver function
public static void main(String[] args)
{
int n = 9;
printSubsets(n);
}
}
// This code is contributed by Anant Agarwal.
Python3
# Python program to print all bitwise
# subsets of N (Naive approach)
def printSubsets(n):
for i in range(n + 1):
if ((n & i) == i):
print(i ," ", end = "")
# Driver code
n = 9
printSubsets(n)
# This code is contributed by Anant Agarwal.
C#
// C# program to print all bitwise
// subsets of N (Naive approach)
using System;
class GFG {
// function to find bitwise subsets
// Naive approach
static void printSubsets(int n)
{
for (int i = 0; i <= n; i++)
if ((n & i) == i)
Console.Write(i + " ");
}
// Driver function
public static void Main()
{
int n = 9;
printSubsets(n);
}
}
// This code is contributed by vt_m.
JavaScript
<script>
// JavaScript program to print all bitwise
// subsets of N (Efficient approach)
// function to find bitwise
// subsets Efficient approach
function printSubsets(n)
{
for (let i = n; i > 0; i = (i - 1) & n)
document.write(i + " ");
document.write(" 0 ");
}
// Driver code
let n = 9;
printSubsets(n);
// This code is contributed by souravghosh0416.
</script>
PHP
<?php
// PHP program to print all bitwise
// subsets of N (Naive approach)
// function to find bitwise subsets
// Naive approach
function printSubsets($n)
{
for ($i = 0; $i <= $n; $i++)
if (($n & $i) == $i)
echo $i." ";
}
// Driver Code
$n = 9;
printSubsets($n);
// This code is contributed by mits
?>
Time Complexity : O(N)
Efficient Solution: An efficient solution is to use bitwise operators to find the subsets. Instead of iterating for every i, we can simply iterate for the bitwise subsets only. Iterating backward for i=(i-1)&n gives us every bitwise subset, where i starts from n and ends at 1.
Below is the implementation of above idea:
C++
// CPP program to print all bitwise
// subsets of N (Efficient approach)
#include <bits/stdc++.h>
using namespace std;
// function to find bitwise subsets
// Efficient approach
void printSubsets(int n) {
for (int i = n; i > 0; i = (i - 1) & n)
cout << i << " ";
cout << 0;
}
// Driver Code
int main() {
int n = 9;
printSubsets(n);
return 0;
}
Java
// Java program to print all bitwise
// subsets of N (Efficient approach)
class GFG
{
// function to find bitwise
// subsets Efficient approach
static void printSubsets(int n)
{
for (int i = n; i > 0; i = (i - 1) & n)
System.out.print(i + " ");
System.out.print(" 0 ");
}
// Driver Code
public static void main(String[] args)
{
int n = 9;
printSubsets(n);
}
}
// This code is contributed by ajit.
Python3
# Python 3 program to
# print all bitwise
# subsets of N
# (Efficient approach)
# function to find
# bitwise subsets
# Efficient approach
def printSubsets(n):
i=n
while(i != 0):
print(i,end=" ")
i=(i - 1) & n
print("0")
# Driver Code
n = 9
printSubsets(n)
# This code is contributed by
# Smith Dinesh Semwal
C#
// C# program to print all bitwise
// subsets of N (Efficient approach)
using System;
public class GFG {
// function to find bitwise subsets
// Efficient approach
static void printSubsets(int n) {
for (int i = n; i > 0; i = (i - 1) & n)
Console.Write(i +" ");
Console.WriteLine("0");
}
// Driver Code
static public void Main () {
int n = 9;
printSubsets(n);
}
}
// This code is contributed by vt_m.
JavaScript
<script>
// Javascript program to print all bitwise
// subsets of N (Efficient approach)
// Function to find bitwise subsets
// Efficient approach
function printSubsets(n)
{
for(let i = n; i > 0; i = (i - 1) & n)
document.write(i +" ");
document.write("0" + "</br>");
}
// Driver code
let n = 9;
printSubsets(n);
// This code is contributed by divyesh072019
</script>
PHP
<?php
// PHP program to print all bitwise
// subsets of N (Efficient approach)
// function to find bitwise subsets
// Efficient approach
function printSubsets($n)
{
for ($i = $n; $i > 0;
$i = ($i - 1) & $n)
echo $i." ";
echo "0";
}
// Driver Code
$n = 9;
printSubsets($n);
// This code is contributed by mits
?>
Output :
9 8 1 0
Time Complexity: O(K), where K is the number of bitwise subsets of N.
Approach: Optimized Bit Manipulation
Steps:
- Initialize an empty list res with 0 as the first element.
- Initialize a variable x as 1.
- While x is less than or equal to N, do the following:
a. If the x-th bit of N is 1, then for each element r in res, append r | x to res.
b. Multiply x by 2. - Return the final list res.
C++
#include <iostream>
#include <vector>
using namespace std;
vector<int> bitwise_and_set(int N) {
vector<int> res = {0};
int x = 1;
while (x <= N) {
if (N & x) {
vector<int> temp;
for (int r : res) {
temp.push_back(r | x);
}
res.insert(res.end(), temp.begin(), temp.end());
}
x <<= 1;
}
return res;
}
int main() {
int N = 5;
vector<int> result = bitwise_and_set(N);
for (int r : result) {
cout << r << " ";
}
return 0;
}
Java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static List<Integer> bitwiseAndSet(int N) {
List<Integer> res = new ArrayList<>();
res.add(0);
int x = 1;
while (x <= N) {
if ((N & x) != 0) {
List<Integer> temp = new ArrayList<>();
for (int r : res) {
temp.add(r | x);
}
res.addAll(temp);
}
x <<= 1;
}
return res;
}
public static void main(String[] args) {
int N = 5;
List<Integer> result = bitwiseAndSet(N);
for (int r : result) {
System.out.print(r + " ");
}
}
}
Python3
def bitwise_and_set(N):
res = [0]
x = 1
while x <= N:
if N & x:
res += [r | x for r in res]
x <<= 1
return res
# Example Usage
N = 5
print(bitwise_and_set(N)) # Output: [0, 1, 4, 5]
C#
using System;
using System.Collections.Generic;
public class Program {
public static List<int> BitwiseAndSet(int N) {
List<int> res = new List<int> {0};
int x = 1;
while (x <= N) {
if ((N & x) != 0) {
List<int> temp = new List<int>();
foreach (int r in res) {
temp.Add(r | x);
}
res.AddRange(temp);
}
x <<= 1;
}
return res;
}
public static void Main() {
int N = 5;
List<int> result = BitwiseAndSet(N);
foreach (int r in result) {
Console.Write(r + " ");
}
}
}
JavaScript
function bitwiseAndSet(N) {
var res = [0]; // Initialize the result array with 0
var x = 1; // Initialize x as 1
while (x <= N) { // Loop while x is less than or equal to N
if (N & x) { // If the bitwise AND of N and x is non-zero
var temp = []; // Create a temporary array
for (var r of res) { // Iterate over the elements of res array
temp.push(r | x); // Perform bitwise OR operation and add the result to temp array
}
res = res.concat(temp); // Concatenate temp array to res array
}
x <<= 1; // Left shift x by 1
}
return res; // Return the resulting array
}
var N = 5;
var result = bitwiseAndSet(N);
for (var r of result) { // Iterate over the elements of result array
console.log(r + " "); // Print each element followed by a space
}
Time Complexity: O(log N)
Auxiliary Space: O(2^log N)
Similar Reads
Bit Manipulation for Competitive Programming Bit manipulation is a technique in competitive programming that involves the manipulation of individual bits in binary representations of numbers. It is a valuable technique in competitive programming because it allows you to solve problems efficiently, often reducing time complexity and memory usag
15+ min read
Count set bits in an integer Write an efficient program to count the number of 1s in the binary representation of an integer.Examples : Input : n = 6Output : 2Binary representation of 6 is 110 and has 2 set bitsInput : n = 13Output : 3Binary representation of 13 is 1101 and has 3 set bits[Naive Approach] - One by One CountingTh
15+ min read
Count total set bits in first N Natural Numbers (all numbers from 1 to N) Given a positive integer n, the task is to count the total number of set bits in binary representation of all natural numbers from 1 to n. Examples: Input: n= 3Output: 4Explanation: Numbers from 1 to 3: {1, 2, 3}Binary Representation of 1: 01 -> Set bits = 1Binary Representation of 2: 10 -> Se
9 min read
Check whether the number has only first and last bits set Given a positive integer n. The problem is to check whether only the first and last bits are set in the binary representation of n.Examples: Input : 9 Output : Yes (9)10 = (1001)2, only the first and last bits are set. Input : 15 Output : No (15)10 = (1111)2, except first and last there are other bi
4 min read
Shortest path length between two given nodes such that adjacent nodes are at bit difference 2 Given an unweighted and undirected graph consisting of N nodes and two integers a and b. The edge between any two nodes exists only if the bit difference between them is 2, the task is to find the length of the shortest path between the nodes a and b. If a path does not exist between the nodes a and
7 min read
Calculate Bitwise OR of two integers from their given Bitwise AND and Bitwise XOR values Given two integers X and Y, representing Bitwise XOR and Bitwise AND of two positive integers, the task is to calculate the Bitwise OR value of those two positive integers.Examples:Input: X = 5, Y = 2 Output: 7 Explanation: If A and B are two positive integers such that A ^ B = 5, A & B = 2, the
7 min read
Unset least significant K bits of a given number Given an integer N, the task is to print the number obtained by unsetting the least significant K bits from N. Examples: Input: N = 200, K=5Output: 192Explanation: (200)10 = (11001000)2 Unsetting least significant K(= 5) bits from the above binary representation, the new number obtained is (11000000
4 min read
Find all powers of 2 less than or equal to a given number Given a positive number N, the task is to find out all the perfect powers of two which are less than or equal to the given number N. Examples: Input: N = 63 Output: 32 16 8 4 2 1 Explanation: There are total of 6 powers of 2, which are less than or equal to the given number N. Input: N = 193 Output:
6 min read
Powers of 2 to required sum Given an integer N, task is to find the numbers which when raised to the power of 2 and added finally, gives the integer N. Example : Input : 71307 Output : 0, 1, 3, 7, 9, 10, 12, 16 Explanation : 71307 = 2^0 + 2^1 + 2^3 + 2^7 + 2^9 + 2^10 + 2^12 + 2^16 Input : 1213 Output : 0, 2, 3, 4, 5, 7, 10 Exp
10 min read
Print bitwise AND set of a number N Given a number N, print all the numbers which are a bitwise AND set of the binary representation of N. Bitwise AND set of a number N is all possible numbers x smaller than or equal N such that N & i is equal to x for some number i. Examples : Input : N = 5Output : 0, 1, 4, 5 Explanation: 0 &
8 min read