A perfect power is a number that can be expressed as power of another positive integer.
Given a number n, find count of numbers from 1 to n that are of type xy where x >= 1 and y > 1
Examples :
Input : n = 10 Output : 4 1 4 8 and 9 are the numbers that are of form x ^ y where x > 0 and y > 1 Input : n = 50 Output : 10
A simple solution is to go through all powers of numbers from i = 2 to square root of n.
// CPP program to count number of numbers from // 1 to n are of type x^y where x>0 and y>1 #include <bits/stdc++.h> using namespace std;
// For our convenience #define ll long long // Function that keeps all the odd power // numbers upto n int powerNumbers( int n)
{ // v is going to store all power numbers
vector< int > v;
v.push_back(1);
// Traverse through all base numbers and
// compute all their powers smaller than
// or equal to n.
for (ll i = 2; i * i <= n; i++) {
ll j = i * i;
v.push_back(j);
while (j * i <= n) {
v.push_back(j * i);
j = j * i;
}
}
// Remove all duplicates
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
return v.size();
} int main()
{ cout << powerNumbers(50);
return 0;
} |
// Java program to count number of numbers from // 1 to n are of type x^y where x>0 and y>1 import java.io.*;
import java.util.*;
public class GFG {
// Function that keeps all the odd power
// numbers upto n
static int powerNumbers( int n)
{
// v is going to store all unique
// power numbers
HashSet<Integer> v = new HashSet<Integer>();
v.add( 1 );
// Traverse through all base numbers
// and compute all their powers
// smaller than or equal to n.
for ( int i = 2 ; i * i <= n; i++) {
int j = i * i;
v.add(j);
while (j * i <= n) {
v.add(j * i);
j = j * i;
}
}
return v.size();
}
// Driver code
public static void main(String args[])
{
System.out.print(powerNumbers( 50 ));
}
} // This code is contributed by Manish Shaw // (manishshaw1) |
# Python3 program to count number # of numbers from 1 to n are of # type x^y where x>0 and y>1 # Function that keeps all the odd # power numbers upto n def powerNumbers(n):
# v is going to store all
# unique power numbers
v = set ();
v.add( 1 );
# Traverse through all base
# numbers and compute all
# their powers smaller than
# or equal to n.
for i in range ( 2 , n + 1 ):
if (i * i < = n):
j = i * i;
v.add(j);
while (j * i < = n):
v.add(j * i);
j = j * i;
return len (v);
print (powerNumbers( 50 ));
# This code is contributed by # Manish Shaw (manishshaw1) |
// C# program to count number of numbers from // 1 to n are of type x^y where x>0 and y>1 using System;
using System.Collections.Generic;
using System.Linq;
class GFG {
// Function that keeps all the odd power
// numbers upto n
static int powerNumbers( int n)
{
// v is going to store all unique
// power numbers
HashSet< int > v = new HashSet< int >();
v.Add(1);
// Traverse through all base numbers
// and compute all their powers
// smaller than or equal to n.
for ( int i = 2; i * i <= n; i++) {
int j = i * i;
v.Add(j);
while (j * i <= n) {
v.Add(j * i);
j = j * i;
}
}
return v.Count;
}
// Driver code
public static void Main()
{
Console.WriteLine(powerNumbers(50));
}
} // This code is contributed by Manish Shaw // (manishshaw1) |
<?php // PHP program to count number of // numbers from 1 to n are of type // x^y where x>0 and y>1 // Function that keeps all the // odd power numbers upto n function powerNumbers( $n )
{ // v is going to store
// all power numbers
$v = array ();
array_push ( $v , 1);
// Traverse through all base
// numbers and compute all
// their powers smaller than
// or equal to n.
for ( $i = 2; $i * $i <= $n ; $i ++)
{
$j = $i * $i ;
array_push ( $v , $j );
while ( $j * $i <= $n )
{
array_push ( $v , $j * $i );
$j = $j * $i ;
}
}
// Remove all duplicates
sort( $v );
$v = array_unique ( $v );
return count ( $v );
} // Driver Code echo (powerNumbers(50));
// This code is contributed by // Manish Shaw(manishshaw1) ?> |
<script> // JavaScript program to count number of numbers from
// 1 to n are of type x^y where x>0 and y>1
// Function that keeps all the odd power
// numbers upto n
function powerNumbers(n)
{
// v is going to store all unique
// power numbers
let v = new Set();
v.add(1);
// Traverse through all base numbers
// and compute all their powers
// smaller than or equal to n.
for (let i = 2; i * i <= n; i++) {
let j = i * i;
v.add(j);
while (j * i <= n) {
v.add(j * i);
j = j * i;
}
}
return v.size;
}
document.write(powerNumbers(50));
</script> |
10
Time Complexity: O(nlogn)
Auxiliary Space: O(n)
Efficient Solution
We divide output set into subsets.
Even Powers: Simply we need to square root n. The count of even powers smaller than n is square root of n. For example even powers smaller than 25 are (1, 4, 9, 16 and 25).
Odd Powers: We modify above function to consider only odd powers.
// C++ program to count number of numbers from // 1 to n are of type x^y where x>0 and y>1 #include <bits/stdc++.h> using namespace std;
// For our convenience #define ll long long // Function that keeps all the odd power // numbers upto n int powerNumbers( int n)
{ vector< int > v;
for (ll i = 2; i * i * i <= n; i++) {
ll j = i * i;
while (j * i <= n) {
j *= i;
// We need exclude perfect
// squares.
ll s = sqrt (j);
if (s * s != j)
v.push_back(j);
}
}
// sort the vector
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
// Return sum of odd and even powers.
return v.size() + (ll) sqrt (n);
} int main()
{ cout << powerNumbers(50);
return 0;
} |
// Java program to count number // of numbers from 1 to n are // of type x^y where x>0 and y>1 import java.io.*;
import java.util.*;
class GFG
{ // Function that keeps all
// the odd power numbers upto n
static long powerNumbers( int n)
{
HashSet<Long> v = new HashSet<Long>();
for ( long i = 2 ; i * i * i <= n; i++)
{
long j = i * i;
while (j * i <= n)
{
j *= i;
// We need exclude
// perfect squares.
long s = ( long )Math.sqrt(j);
if (s * s != j)
v.add(j);
}
}
// sort the vector
// v.Sort();
// v.erase(unique(v.begin(),
// v.end()), v.end());
// Return sum of odd
// and even powers.
return v.size() + ( long )Math.sqrt(n);
}
// Driver Code
public static void main(String args[])
{
System.out.print(powerNumbers( 50 ));
}
} // This code is contributed by // Manish Shaw(manishshaw1) |
# Python3 program to count number of # numbers from 1 to n are of type x^y # where x>0 and y>1 import math
# Function that keeps all the odd power # numbers upto n def powerNumbers( n):
v = []
for i in range ( 2 ,
int (math. pow (n, 1.0 /
3.0 )) + 1 ) :
j = i * i
while (j * i < = n) :
j = j * i
# We need exclude perfect
# squares.
s = int (math.sqrt(j))
if (s * s ! = j):
v.append(j)
# sort the vector
v.sort()
v = list ( dict .fromkeys(v))
# Return sum of odd and even powers.
return len (v) + int (math.sqrt(n))
# Driver Code if __name__ = = '__main__' :
print (powerNumbers( 50 ))
# This code is contributed by Arnab Kundu |
// C# program to count number // of numbers from 1 to n are // of type x^y where x>0 and y>1 using System;
using System.Collections.Generic;
class GFG
{ // Function that keeps all
// the odd power numbers upto n
static long powerNumbers( int n)
{
HashSet< long > v = new HashSet< long >();
for ( long i = 2; i * i * i <= n; i++)
{
long j = i * i;
while (j * i <= n)
{
j *= i;
// We need exclude
// perfect squares.
long s = ( long )Math.Sqrt(j);
if (s * s != j)
v.Add(j);
}
}
// sort the vector
//v.Sort();
//v.erase(unique(v.begin(),
// v.end()), v.end());
// Return sum of odd
// and even powers.
return v.Count + ( long )Math.Sqrt(n);
}
// Driver Code
static void Main()
{
Console.Write(powerNumbers(50));
}
} // This code is contributed by // Manish Shaw(manishshaw1) |
<?php // PHP program to count number // of numbers from 1 to n are // of type x^y where x>0 and y>1 // Function that keeps all the // odd power numbers upto n function powerNumbers( $n )
{ $v = array ();
for ( $i = 2; $i * $i * $i <= $n ; $i ++)
{
$j = $i * $i ;
while ( $j * $i <= $n )
{
$j *= $i ;
// We need exclude perfect
// squares.
$s = sqrt( $j );
if ( $s * $s != $j )
array_push ( $v , $j );
}
}
// sort the vector
sort( $v );
$uni = array_unique ( $v );
for ( $i = 0; $i < count ( $uni ); $i ++)
{
$key = array_search ( $uni [ $i ], $v );
unset( $v [ $key ]);
}
// Return sum of odd
// and even powers.
return count ( $v ) + 3 +
intval (sqrt( $n ));
} // Driver Code echo (powerNumbers(50));
// This code is contributed by // Manish Shaw(manishshaw1) ?> |
<script> // Javascript program to count number
// of numbers from 1 to n are
// of type x^y where x>0 and y>1
// Function that keeps all
// the odd power numbers upto n
function powerNumbers(n)
{
let v = new Set();
for (let i = 2; i * i * i <= n; i++)
{
let j = i * i;
while (j * i <= n)
{
j *= i;
// We need exclude
// perfect squares.
let s = parseInt(Math.sqrt(j), 10);
if (s * s != j)
v.add(j);
}
}
// sort the vector
// v.Sort();
// v.erase(unique(v.begin(),
// v.end()), v.end());
// Return sum of odd
// and even powers.
return v.size + parseInt(Math.sqrt(n), 10);
}
document.write(powerNumbers(50));
// This code is contributed by vaibhavrabadiya3. </script> |
10
Time Complexity: O(nlogn)
Auxiliary Space: O(n^(1/4))