# Program to count number of distinct Squares and Cubes upto N

• Difficulty Level : Easy
• Last Updated : 26 Jul, 2022

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
Explanation: Numbers that are perfect Square or perfect Cube
1, 4, 8, 9, 16, 25, 27, 36, 49, 64

Input: N = 25
Output:
Explanation: Numbers that are perfect Square or perfect Cube
1, 4, 8, 9, 16, 25

Naive Approach:

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`

Time Complexity: O(N)
Space Complexity: O(1)

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.

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` `cr(N):``    ``if` `pow``(``round``(N ``*``*` `(``1` `/` `3``)), ``3``) ``=``=` `N:``        ``return` `round``(N ``*``*` `(``1` `/` `3``))` `    ``return` `int``(N ``*``*` `(``1` `/` `3``))`  `def` `countSC(N):``    ``res ``=` `(``int``(math.sqrt(N)) ``+``           ``int``(cr(N)) ``-``           ``int``(math.sqrt(cr(N))))` `    ``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`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up