package Others; import java.util.Scanner; /** * @author Nishita Aggarwal *

Brian Kernighan’s Algorithm *

algorithm to count the number of set bits in a given number *

Subtraction of 1 from a number toggles all the bits (from right to left) till the * rightmost set bit(including the rightmost set bit). So if we subtract a number by 1 and do * bitwise & with itself i.e. (n & (n-1)), we unset the rightmost set bit. *

If we do n & (n-1) in a loop and count the no of times loop executes we get the set bit * count. *

*

Time Complexity: O(logn) */ public class BrianKernighanAlgorithm { /** * @param num: number in which we count the set bits * @return int: Number of set bits */ static int countSetBits(int num) { int cnt = 0; while (num != 0) { num = num & (num - 1); cnt++; } return cnt; } /** @param args : command line arguments */ public static void main(String args[]) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int setBitCount = countSetBits(num); System.out.println(setBitCount); sc.close(); } }