Skip to content
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 ``#include // 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

 ``

## Javascript

 ``
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 ``#include // 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

 ``

## Javascript

 ``
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