Print numbers having first and last bits as the only set bits

Given a positive integer n. The problem is to print numbers in the range 1 to n having first and last bits as the only set bits.

Examples:

Input : n = 10
Output : 1 3 5 9
(1)10 = (1)2.
(3)10 = (11)2.
(5)10 = (101)2.
(9)10 = (1001)2

Naive Approach: Print “1”. Now for i = 3 to n, check if (i-1) is a Perfect power of two or not. If true then print i.

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to print numbers in the range 1 to n
// having first and last bits as the only set bits
#include <bits/stdc++.h>
  
using namespace std;
  
typedef unsigned long long int ull;
  
// function to check whether 'n'
// is a power of 2 or not
bool powerOfTwo(ull n)
{
    return (!(n & n-1));
}
  
// function to print numbers in the range 1 to n having
// first and last bits as the only set bits
void printNumWithFirstLastBitsSet(ull n)
{
    ull i = 1;
      
    // first number is '1'    
    cout << i << " ";
      
    // generating all the numbers
    for (i = 3; i <= n; i++)
        // if true, then print 'i'
        if (powerOfTwo(i-1))
            cout << i << " ";    
}
  
// Driver program to test above
int main()
{
    ull n = 10;
    printNumWithFirstLastBitsSet(n);
    return 0;
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Naive approach 
// Java implementation to print
// numbers in the range 1 to n
// having first and last bits as
// the only set bits
import java.io.*;
  
class GFG {
      
    // function to check whether 'n'
    // is a power of 2 or not
    static Boolean powerOfTwo(long n)
    {
        return (!((n & n-1) != 0));
    }
      
    // function to print numbers in the 
    // range 1 to n having first and
    // last bits as the only set bits
    static void printNumWithFirstLastBitsSet(long n)
    {
        long i = 1;
          
        // first number is '1' 
        System.out.print( i + " ");
          
        // generating all the numbers
        for (i = 3; i <= n; i++)
          
            // if true, then print 'i'
            if (powerOfTwo(i - 1))
                System.out.print(i + " "); 
    }
        // Driver function
        public static void main (String[] args) {
        long n = 10l;
        printNumWithFirstLastBitsSet(n);
      
        }
}
  
//This code is contributed by Gitanjali.
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python implementation to print 
# numbers in the range 1 to n
# having first and last bits 
# as the only set bits
import math
  
# function to check whether 'n'
# is a power of 2 or not
def powerOfTwo(n):
    re = (n & n - 1)
    return (re == 0)
  
# function to print numbers 
# in the range 1 to n having
# first and last bits as 
# the only set bits
def printNumWithFirstLastBitsSet(n):
    i = 1
      
    # first number is '1' 
    print ( i, end = " ")
      
    # generating all the numbers
    for i in range(3, n + 1):
          
        # if true, then print 'i'
        if (powerOfTwo(i - 1)):
            print ( i, end = " ")
      
      
# driver function
n = 10
printNumWithFirstLastBitsSet(n)
  
# This code is contributed by Gitanjali.
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Naive approach 
// C# implementation to print
// numbers in the range 1 to n
// having first and last bits as
// the only set bits
using System;
  
class GFG {
      
    // function to check whether 'n'
    // is a power of 2 or not
    static Boolean powerOfTwo(long n)
    {
        return (!((n & n-1) != 0));
    }
      
    // function to print numbers in the 
    // range 1 to n having first and
    // last bits as the only set bits
    static void printNumWithFirstLastBitsSet(long n)
    {
        long i = 1;
          
        // first number is '1' 
        Console.Write( i + " ");
          
        // generating all the numbers
        for (i = 3; i <= n; i++)
          
            // if true, then print 'i'
            if (powerOfTwo(i - 1))
                Console.Write(i + " "); 
    }
      
    // Driver function
    public static void Main () 
    {
        long n = 10L;
        printNumWithFirstLastBitsSet(n);
          
    }
}
  
// This code is contributed by Vt_m.
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// php implementation to print 
// numbers in the range 1 to n
// having first and last bits 
// as the only set bits
  
// function to check whether 'n'
// is a power of 2 or not
function powerOfTwo($n)
{
    return (!($n & $n - 1));
}
  
// function to print numbers in
// the range 1 to n having
// first and last bits as
// the only set bits
function printNumWithFirstLastBitsSet($n)
{
    $i = 1;
      
    // first number is '1' 
    echo $i." ";
      
    // generating all the numbers
    for ($i = 3; $i <= $n; $i++)
      
        // if true, then print 'i'
        if (powerOfTwo($i - 1))
            echo $i." "
}
  
    // Driver Code
    $n = 10;
    printNumWithFirstLastBitsSet($n);
  
// This Code is contributed by mits 
?>
chevron_right


Output:

1 3 5 9

Time Complexity: O(n).

Efficient Approach: Print “1”. Now one by one generate perfect power of two (except ‘1’) with the help of bitwise left shift operation. Bitwise xor these numbers with 1 and if result is in the range print them else stop.

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to print numbers in the range 1 to n
// having first and last bits as the only set bits
#include <bits/stdc++.h>
  
using namespace std;
  
typedef unsigned long long int ull;
  
// function to print numbers in the range 1 to n having
// first and last bits as the only set bits
void printNumWithFirstLastBitsSet(ull n)
{
    ull power_2 = 1, num;
      
    // first number is '1'    
    cout << power_2 << " ";
      
    while (1)    
    {
        // obtaining next perfect power of 2
        power_2 <<= 1;
          
        // toggling the last bit to convert 
        // it to as set bit
        num = power_2 ^ 1;
          
        // if out of range then break;
        if (n < num)
            break;
              
        // display    
        cout << num << " ";    
    }        
}
  
// Driver program to test above
int main()
{
    ull n = 10;
    printNumWithFirstLastBitsSet(n);
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// efficient approach Java implementation
// to print numbers in the range 1 to n
// having first and last bits as the only set bits
  
import java.io.*;
  
class GFG {
  
    // function to print numbers in 
    // the range 1 to n having first and 
    // last bits as the only set bits
    static void prNumWithFirstLastBitsSet(long n)
    {
        long power_2 = 1, num;
      
        // first number is '1' 
        System.out.print(power_2 + " ");
      
        while (true
        {
            // obtaining next perfect power of 2
            power_2 <<= 1;
              
            // toggling the last bit to  
            // convert it to as set bit
            num = power_2 ^ 1;
              
            // if out of range then break;
            if (n < num)
                break;
                  
            // display 
            System.out.print(num + " "); 
        }
      
}
  
    public static void main (String[] args) {
    long n = 10;
    prNumWithFirstLastBitsSet(n);
  
    }
}
// This code is contributed by Gitanjali.
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation to 
# pr numbers in the range 
# 1 to n having first and 
# last bits as the only set bits
  
  
# function to print numbers in the 
# range 1 to n having first and 
# last bits as the only set bits
def prNumWithFirstLastBitsSet(n):
      
    power_2 = 1
      
    # first number is '1' 
    print ( power_2, end = ' ')
      
    while (1):
        # obtaining next perfect
        # power of 2
        power_2 <<= 1
          
        # toggling the last bit to  
        # convert it to as set bit
        num = power_2 ^ 1
          
        # if out of range then break;
        if (n < num):
            break
              
        # display 
        print ( num, end = ' '
      
  
  
# Driver program 
n = 10;
prNumWithFirstLastBitsSet(n)
  
# This code is contributed by saloni1297
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// efficient approach C# implementation
// to print numbers in the range 1 to n
// having first and last bits as the only set bits
using System;
  
class GFG {
  
    // function to print numbers in 
    // the range 1 to n having first and 
    // last bits as the only set bits
    static void prNumWithFirstLastBitsSet(long n)
    {
        long power_2 = 1, num;
      
        // first number is '1' 
        Console.Write(power_2 + " ");
      
        while (true
        {
            // obtaining next perfect power of 2
            power_2 <<= 1;
              
            // toggling the last bit to 
            // convert it to as set bit
            num = power_2 ^ 1;
              
            // if out of range then break;
            if (n < num)
                break;
                  
            // display 
            Console.Write(num + " "); 
        }
      
    }
      
    // Driver code
    public static void Main () 
    {
        long n = 10;
        prNumWithFirstLastBitsSet(n);
  
    }
}
// This code is contributed by vt_m.
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// php implementation to print 
// numbers in the range 1 to n
// having first and last bits 
// as the only set bits
  
// function to print numbers in 
// the range 1 to n having
// first and last bits as 
// the only set bits
function printNumWithFirstLastBitsSet($n)
{
    $power_2 = 1;
      
    // first number is '1' 
    echo $power_2." ";
      
    while (1) 
    {
          
        // obtaining next perfect
        // power of 2
        $power_2 <<= 1;
          
        // toggling the last
        // bit to convert 
        // it to as set bit
        $num = $power_2 ^ 1;
          
        // if out of range 
        // then break;
        if ($n < $num)
            break;
              
        // display 
        echo $num." "
    
}
  
    // Driver code
    $n = 10;
    printNumWithFirstLastBitsSet($n);
  
// This code is contributed by mits 
?>
chevron_right


Output:
1 3 5 9

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




Article Tags :
Practice Tags :