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.
// 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;
} |
// 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. |
# 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. |
// 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. |
<?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 ?> |
<script> // Javascript 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)
{ let i = 1;
// first number is '1'
document.write(i + " " );
// generating all the numbers
for (i = 3; i <= n; i++)
// if true, then print 'i'
if (powerOfTwo(i-1))
document.write(i + " " );
} // Driver program to test above let n = 10;
printNumWithFirstLastBitsSet(n);
//This code is contributed by Mayank Tyagi </script> |
Output:
1 3 5 9
Time Complexity : O(n)
Auxiliary Space: O(1)
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.
// 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;
} |
// 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. |
# 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 |
// 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. |
<?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 ?> |
<script> // Javascript 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)
{ var power_2 = 1, num;
// first number is '1'
document.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
document.write(num + " " );
}
} // Driver program to test above var n = 10;
printNumWithFirstLastBitsSet(n); </script> |
Output:
1 3 5 9
Time Complexity : O(logn)
Auxiliary Space: O(1)