Program to count number of distinct Squares and Cubes upto N

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, 64Input: 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++
Java
Python3
C#
PHP
Javascript
// 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 squarebool isSquare(int num){    int root = sqrt(num);    return (root * root) == num;} // Function to check if the// number is a perfect cubebool isCube(int num){    int root = cbrt(num);    return (root * root * root) == num;} // Function to count the number// of perfect squares and cubesint 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 codeint main(){    int N = 20;     cout<< "Number of squares and cubes is " << countSC(N);    return 0;}
// Java implementation of// above approachclass GFG{ // Function to check if the// number is a perfect squarestatic boolean isSquare(int num){    int root = (int)Math.sqrt(num);    return (root * root) == num;} // Function to check if the// number is a perfect cubestatic boolean isCube(int num){    int root = (int)Math.cbrt(num);    return (root * root *            root) == num;} // Function to count the number// of perfect squares and cubesstatic 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 codepublic 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
# Python 3 implementation of# above approach # Function to check if the# number is a perfect squaredef isSquare(num) :    root = int(num ** (1 / 2))     return (root * root) == num # Function to check if the# number is a perfect cubedef isCube(num) :    root = int(num ** (1 / 3))    return (root * root * root ) == num # Function to count the number# of perfect squares and cubesdef 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 codeif __name__ == "__main__" :     N = 20     print("Number of squares and cubes is ",                                 countSC(N))             # This code is contributed by ANKITRAI1
// C# implementation of// above approachusing System; class GFG{ // Function to check if the// number is a perfect squarestatic bool isSquare(int num){    int root = (int)Math.Sqrt(num);    return (root * root) == num;} // Function to check if the// number is a perfect cubestatic 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 cubesstatic 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 codepublic static void Main(){    int N = 20;     Console.Write("Number of squares and " +                  "cubes is " + countSC(N));}} // This code is contributed// by ChitraNayal
<?php// PHP implementation of above approach // Function to check if the// number is a perfect squarefunction isSquare($num){    $root = (int)sqrt($num);    return ($root * $root) == $num;} // Function to check if the// number is a perfect cubefunction isCube($num){    $root = (int)pow($num, 1 / 3);    return ($root * $root *            $root) == $num;} // Function to count the number// of perfect squares and cubesfunction 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?>
<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>
Number of squares and cubes is 5
 
Efficient Approach:  
Number of squares from 1 to N is floor(sqrt(N)).Number of cubes from 1 to N is floor(cbrt(N)).Eliminate the numbers which are both square and cube ( like 1, 64.... ) by subtracting floor(sqrt(cbrt(N))) from it.
Number of squares from 1 to N is floor(sqrt(N)).
Number of cubes from 1 to N is floor(cbrt(N)).
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++
Java
Python3
C#
PHP
Javascript
// 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 cubesint countSC(int N){    int res = (int)sqrt(N) + (int)cbrt(N)              - (int)(sqrt(cbrt(N)));     return res;} // Driver codeint main(){    int N = 20;     cout << "Number of squares and cubes is " << countSC(N);    return 0;}
// Java implementation of// above approachclass GFG{ // Function to count the number// of perfect squares and cubesstatic int countSC(int N){    int res = (int)Math.sqrt(N) +              (int)Math.cbrt(N) -              (int)(Math.sqrt(Math.cbrt(N)));     return res;} // Driver codepublic 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
# Python implementation of# above approachimport math # for sqrt() # Function to count the number# of perfect squares and cubesdef countSC(N):    res = (int(math.sqrt(N)) +           int(N ** (1 / 3)) -           int(math.sqrt(N ** (1 / 3))))     return res # Driver codeN = 20print("Number of squares and cubes is",                            countSC(N)) # This code is contributed# by vaibhav29498
//C# implementation of// above approachusing 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 implementation of above approach // Function to count the number// of perfect squares and cubesfunction 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?>
<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>
Number of squares and cubes is 5
 
ankthon
vaibhav29498
ukasp
Shashank12
29AjayKumar
Akanksha_Rai
divyeshrabadiya07
divyesh072019
CPP-Functions
cpp-math
maths-cube
maths-perfect-square
Mathematical
School Programming
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.