Skip to content
Related Articles

Related Articles

Program to count number of distinct Squares and Cubes upto N
  • Difficulty Level : Easy
  • Last Updated : 24 Mar, 2021

Given a number N, the task is to find No. of perfect Squares and perfect Cubes from 1 to a given integer, N ( Both Inclusive ).
Note: Numbers which are both perfect Square and perfect Cube should be counted once.
Examples: 
 

Input: N = 70 
Output: 10 
Numbers that are perfect Square or perfect Cube 
1, 4, 8, 9, 16, 25, 27, 36, 49, 64
Input: N = 25 
Output: 6 
Numbers that are perfect Square or perfect Cube 
1, 4, 8, 9, 16, 25 
 

 

A Naive approach is to check all numbers from 1 to N, if it is a square or cube.
Below is the implementation of above approach: 
 

C++




// C++ implementation of above approach
#include <iostream>
#include <math.h> // For sqrt() and cbrt()
using namespace std;
 
// Function to check if the
// number is a perfect square
bool isSquare(int num)
{
    int root = sqrt(num);
    return (root * root) == num;
}
 
// Function to check if the
// number is a perfect cube
bool isCube(int num)
{
    int root = cbrt(num);
    return (root * root * root) == num;
}
 
// Function to count the number
// of perfect squares and cubes
int countSC(int N)
{
    int count = 0;
    for (int i = 1; i <= N; i++) {
 
        // If a number is perfect square,
        if (isSquare(i))
            count++;
 
        // Else if the number is cube or not
        else if (isCube(i))
            count++;
    }
 
    return count;
}
 
// Driver code
int main()
{
    int N = 20;
 
    cout<< "Number of squares and cubes is " << countSC(N);
    return 0;
}

Java




// Java implementation of
// above approach
class GFG
{
 
// Function to check if the
// number is a perfect square
static boolean isSquare(int num)
{
    int root = (int)Math.sqrt(num);
    return (root * root) == num;
}
 
// Function to check if the
// number is a perfect cube
static boolean isCube(int num)
{
    int root = (int)Math.cbrt(num);
    return (root * root *
            root) == num;
}
 
// Function to count the number
// of perfect squares and cubes
static int countSC(int N)
{
    int count = 0;
    for (int i = 1; i <= N; i++)
    {
 
        // If a number is perfect
        // square,
        if (isSquare(i))
            count++;
 
        // Else if the number is
        // cube or not
        else if (isCube(i))
            count++;
    }
 
    return count;
}
 
// Driver code
public static void main(String[] args)
{
    int N = 20;
 
    System.out.println("Number of squares " +
                            "and cubes is " +
                                 countSC(N));
}
}
 
// This code is contributed
// by ChitraNayal

Python3




# Python 3 implementation of
# above approach
 
# Function to check if the
# number is a perfect square
def isSquare(num) :
    root = int(num ** (1 / 2))
 
    return (root * root) == num
 
# Function to check if the
# number is a perfect cube
def isCube(num) :
    root = int(num ** (1 / 3))
    return (root * root * root ) == num
 
# Function to count the number
# of perfect squares and cubes
def countSC(N) :
    count = 0
    for i in range(1, N + 1) :
 
        # If a number is perfect square,
        if isSquare(i) :
            count += 1
             
        # Else if the number is cube
        elif isCube(i) :
            count += 1
             
    return count
 
# Driver code
if __name__ == "__main__" :
 
    N = 20
 
    print("Number of squares and cubes is ",
                                 countSC(N))
             
# This code is contributed by ANKITRAI1

C#




// C# implementation of
// above approach
using System;
 
class GFG
{
 
// Function to check if the
// number is a perfect square
static bool isSquare(int num)
{
    int root = (int)Math.Sqrt(num);
    return (root * root) == num;
}
 
// Function to check if the
// number is a perfect cube
static bool isCube(int num)
{
    int root = (int)Math.Pow(num,
                    (1.0 / 3.0));
    return (root * root * root) == num;
}
 
// Function to count the number
// of perfect squares and cubes
static int countSC(int N)
{
    int count = 0;
    for (int i = 1; i <= N; i++)
    {
 
        // If a number is perfect
        // square,
        if (isSquare(i))
            count++;
 
        // Else if the number is
        // cube or not
        else if (isCube(i))
            count++;
    }
 
    return count;
}
 
// Driver code
public static void Main()
{
    int N = 20;
 
    Console.Write("Number of squares and " +
                  "cubes is " + countSC(N));
}
}
 
// This code is contributed
// by ChitraNayal

PHP




<?php
// PHP implementation of above approach
 
// Function to check if the
// number is a perfect square
function isSquare($num)
{
    $root = (int)sqrt($num);
    return ($root * $root) == $num;
}
 
// Function to check if the
// number is a perfect cube
function isCube($num)
{
    $root = (int)pow($num, 1 / 3);
    return ($root * $root *
            $root) == $num;
}
 
// Function to count the number
// of perfect squares and cubes
function countSC($N)
{
    $count = 0;
    for ($i = 1; $i <= $N; $i++)
    {
 
        // If a number is
        // perfect square,
        if (isSquare($i))
            $count++;
 
        // Else if the number
        // is cube or not
        else if (isCube($i))
            $count++;
    }
 
    return $count;
}
 
// Driver code
$N = 20;
 
echo "Number of squares and " .
     "cubes is " . countSC($N);
 
// This code is contributed
// by ChitraNayal
?>

Javascript




<script>
 
    // Javascript implementation of above approach
     
    // Function to check if the
    // number is a perfect square
    function isSquare(num)
    {
        let root = parseInt(Math.sqrt(num), 10);
        return (root * root) == num;
    }
 
    // Function to check if the
    // number is a perfect cube
    function isCube(num)
    {
        let root = parseInt(Math.cbrt(num), 10);
        return (root * root * root) == num;
    }
     
    // Function to count the number
    // of perfect squares and cubes
    function countSC(N)
    {
        let count = 0;
        for (let i = 1; i <= N; i++) {
 
            // If a number is perfect square,
            if (isSquare(i))
                count++;
 
            // Else if the number is cube or not
            else if (isCube(i))
                count++;
        }
 
        return count;
    }
 
    let N = 20;
   
    document.write("Number of squares and cubes is " + countSC(N));
 
</script>
Output: 



Number of squares and cubes is 5

 

Efficient Approach: 
 

  1. Number of squares from 1 to N is floor(sqrt(N)).
  2. Number of cubes from 1 to N is floor(cbrt(N)).
  3. Eliminate the numbers which are both square and cube ( like 1, 64…. ) by subtracting floor(sqrt(cbrt(N))) from it.

Below is the implementation of the above approach: 
 

C++




// C++ implementation of above approach
#include <iostream>
#include <math.h> // For sqrt() and cbrt()
using namespace std;
 
// Function to count the number
// of perfect squares and cubes
int countSC(int N)
{
    int res = (int)sqrt(N) + (int)cbrt(N)
              - (int)(sqrt(cbrt(N)));
 
    return res;
}
 
// Driver code
int main()
{
    int N = 20;
 
    cout << "Number of squares and cubes is " << countSC(N);
    return 0;
}

Java




// Java implementation of
// above approach
class GFG
{
 
// Function to count the number
// of perfect squares and cubes
static int countSC(int N)
{
    int res = (int)Math.sqrt(N) +
              (int)Math.cbrt(N) -
              (int)(Math.sqrt(Math.cbrt(N)));
 
    return res;
}
 
// Driver code
public static void main(String[] args)
{
    int N = 20;
 
    System.out.println("Number of squares " +
                            "and cubes is " +
                                 countSC(N));
}
}
 
// This code is contributed
// by ChitraNayal

Python3




# Python implementation of
# above approach
import math # for sqrt()
 
# Function to count the number
# of perfect squares and cubes
def countSC(N):
    res = (int(math.sqrt(N)) +
           int(N ** (1 / 3)) -
           int(math.sqrt(N ** (1 / 3))))
 
    return res
 
# Driver code
N = 20
print("Number of squares and cubes is",
                            countSC(N))
 
# This code is contributed
# by vaibhav29498

C#




//C# implementation of
// above approach
using System;
public class GFG {
 
    // Function to count the number
    // of perfect squares and cubes
    static int countSC(int N)
    {
        int res = (int)(Math.Sqrt(N) +
            Math.Ceiling(Math.Pow(N, (double)1 / 3)) -
            (Math.Sqrt(Math.Ceiling(Math.Pow(N, (double)1 / 3)))));
 
        return res;
    }
 
    // Driver code
    public static void Main()
    {
        int N = 20;
 
        Console.Write("Number of squares " + "and cubes is " +
                countSC(N));
    }
}
 
 
/*This code is contributed by 29AjayKumar*/

PHP




<?php
// PHP implementation of above approach
 
// Function to count the number
// of perfect squares and cubes
function countSC($N)
{
    $res = sqrt($N) + pow($N, 1 / 3) -
                (sqrt(pow($N, 1 / 3)));
 
    return floor($res);
}
 
// Driver code
$N = 20;
 
echo "Number of squares and cubes is " ,
                            countSC($N);
 
// This code is contributed
// by Shashank
?>

Javascript




<script>
 
    // Javascript implementation of above approach
     
    // Function to count the number
    // of perfect squares and cubes
    function countSC(N)
    {
        let res = parseInt(Math.sqrt(N), 10) + parseInt(Math.cbrt(N), 10) - parseInt(Math.sqrt(parseInt(Math.cbrt(N), 10)), 10);
 
        return res;
    }
 
    let N = 20;
  
    document.write("Number of squares and cubes is " + countSC(N));
     
</script>
Output: 
Number of squares and cubes is 5

 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :