# Sum of all Perfect Cubes lying in the range [L, R] for Q queries

Given Q queries in the form of 2D array arr[][] whose every row consists of two numbers L and R which signifies the range [L, R], the task is to find the sum of all perfect cubes lying in this range.

Examples:

Input: Q = 2, arr[][] = {{4, 9}, {4, 44}}
Output: 8 35
From 4 to 9: only 8 is the perfect cube. Therefore, 8 is the ans
From 4 to 44: 8, and 27 are the perfect cubes. Therefore, 8 + 27 = 35

Input: Q = 4, arr[][] = {{ 1, 10 }, { 1, 100 }, { 2, 25 }, { 4, 50 }}
Output: 9 100 8 35

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The idea is to use a prefix sum array.

1. The sum all cubes are precomputed and stored in an array pref[] so that every query can be answered in O(1) time.
2. Every ith index in the pref[] array represents the sum of perfect cubes from 1 to that number.
3. Therefore, the sum of perfect cubes from the given range ‘L’ to ‘R’ can be found as from the prefix sum array pref[].

Below is the implementation of the above approach:

## C++

 `// C++ program to find the sum of all ` `// perfect cubes in the given range ` ` `  `#include ` `#define ll int ` `using` `namespace` `std; ` ` `  `// Array to precompute the sum of cubes ` `// from 1 to 100010 so that for every ` `// query, the answer can be returned in O(1). ` `long` `long` `pref; ` ` `  `// Function to check if a number is ` `// a perfect Cube or not ` `int` `isPerfectCube(``long` `long` `int` `x) ` `{ ` `    ``// Find floating point value of ` `    ``// cube root of x. ` `    ``long` `double` `cr = round(cbrt(x)); ` ` `  `    ``// If cube root of x is cr ` `    ``// return the x, else 0 ` `    ``return` `(cr * cr * cr == x) ? x : 0; ` `} ` ` `  `// Function to precompute the perfect ` `// Cubes upto 100000. ` `void` `compute() ` `{ ` `    ``for` `(``int` `i = 1; i <= 100000; ++i) { ` `        ``pref[i] = pref[i - 1] ` `                  ``+ isPerfectCube(i); ` `    ``} ` `} ` ` `  `// Function to print the sum for each query ` `void` `printSum(``int` `L, ``int` `R) ` `{ ` `    ``int` `sum = pref[R] - pref[L - 1]; ` `    ``cout << sum << ``" "``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``// To calculate the precompute function ` `    ``compute(); ` ` `  `    ``int` `Q = 4; ` `    ``int` `arr[] = { { 1, 10 }, ` `                     ``{ 1, 100 }, ` `                     ``{ 2, 25 }, ` `                     ``{ 4, 50 } }; ` ` `  `    ``// Calling the printSum function ` `    ``// for every query ` `    ``for` `(``int` `i = 0; i < Q; i++) { ` `        ``printSum(arr[i], arr[i]); ` `    ``} ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find the sum of all ` `// perfect cubes in the given range ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` `  `/* Name of the class has to be "Main" only if the class is public. */` `class` `GFG ` `{ ` `    ``// Array to precompute the sum of cubes ` `    ``// from 1 to 100010 so that for every ` `    ``// query, the answer can be returned in O(1). ` `     ``public` `static` `int` `[]pref=``new` `int``[``100010``]; ` `       `  `    ``// Function to check if a number is ` `    ``// a perfect Cube or not ` `    ``static` `int` `isPerfectCube(``int` `x) ` `    ``{ ` `        ``// Find floating point value of ` `        ``// cube root of x. ` `        ``double` `cr = Math.round(Math.cbrt(x)); ` `       `  `        ``// If cube root of x is cr ` `        ``// return the x, else 0 ` `        ``if``(cr*cr*cr==(``double``)x) ``return` `x; ` `        ``return` `0``; ` `    ``} ` `       `  `    ``// Function to precompute the perfect ` `    ``// Cubes upto 100000. ` `    ``static` `void` `compute() ` `    ``{ ` `        ``for` `(``int` `i = ``1``; i <= ``100000``; ++i) { ` `            ``pref[i] = pref[i - ``1``]+ isPerfectCube(i); ` `        ``} ` `    ``} ` `       `  `    ``// Function to print the sum for each query ` `    ``static` `void` `printSum(``int` `L, ``int` `R) ` `    ``{ ` `        ``long` `sum = pref[R] - pref[L - ``1``]; ` `        ``System.out.print(sum+``" "``); ` `    ``} ` `       `  `   `  `    `  `    ``// Driver code ` `    ``public` `static` `void` `main (String[] args)  ` `    ``{ ` `         ``// To calculate the precompute function ` `        ``compute(); ` `       `  `        ``int` `Q = ``4``; ` `        ``int` `[][] arr = { { ``1``, ``10` `}, ` `                                ``{ ``1``, ``100` `}, ` `                                ``{ ``2``, ``25` `}, ` `                                ``{ ``4``, ``50` `} }; ` `       `  `        ``// Calling the printSum function ` `        ``// for every query ` `        ``for` `(``int` `i = ``0``; i < Q; i++) { ` `            ``printSum(arr[i][``0``], arr[i][``1``]); ` `        ``} ` `    ``} ` `} ` ` `  `// This code is contributed by chitranayal `

## Python3

 `# Python3 program to find the sum of all  ` `# perfect cubes in the given range  ` ` `  `# Array to precompute the sum of cubes  ` `# from 1 to 100010 so that for every  ` `# query, the answer can be returned in O(1).  ` `pref ``=` `[``0``]``*``100010``;  ` ` `  `# Function to check if a number is  ` `# a perfect Cube or not  ` `def` `isPerfectCube(x) :  ` ` `  `    ``# Find floating point value of  ` `    ``# cube root of x.  ` `    ``cr ``=` `round``(x``*``*``(``1``/``3``));  ` ` `  `    ``# If cube root of x is cr  ` `    ``# return the x, else 0  ` `    ``rslt ``=` `x ``if` `(cr ``*` `cr ``*` `cr ``=``=` `x) ``else` `0``;  ` `    ``return` `rslt; ` ` `  `# Function to precompute the perfect  ` `# Cubes upto 100000.  ` `def` `compute() : ` `    ``for` `i ``in` `range``(``1``, ``100001``) :  ` `        ``pref[i] ``=` `pref[i ``-` `1``] ``+` `isPerfectCube(i);  ` ` `  `# Function to print the sum for each query  ` `def` `printSum(L, R) :  ` ` `  `    ``sum` `=` `pref[R] ``-` `pref[L ``-` `1``];  ` `    ``print``(``sum` `,end``=` `" "``);  ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``# To calculate the precompute function  ` `    ``compute();  ` ` `  `    ``Q ``=` `4``;  ` `    ``arr``=` `[ [ ``1``, ``10` `],  ` `            ``[ ``1``, ``100` `],  ` `            ``[ ``2``, ``25` `],  ` `            ``[ ``4``, ``50` `] ];  ` ` `  `    ``# Calling the printSum function  ` `    ``# for every query  ` `    ``for` `i ``in` `range``(Q) : ` `        ``printSum(arr[i][``0``], arr[i][``1``]);  ` ` `  `# This code is contributed by AnkitRai01 `

## C#

 `// C# program to find the sum of all ` `// perfect cubes in the given range ` `using` `System;  ` `       `  `class` `GFG {  ` `// Array to precompute the sum of cubes ` `// from 1 to 100010 so that for every ` `// query, the answer can be returned in O(1). ` ` ``public` `static` `long` `[]pref=``new` `long``; ` `  `  `// Function to check if a number is ` `// a perfect Cube or not ` `static` `long` `isPerfectCube(``long` `x) ` `{ ` `    ``// Find floating point value of ` `    ``// cube root of x. ` `    ``double` `cr = Math.Round(MathF.Cbrt(x)); ` `  `  `    ``// If cube root of x is cr ` `    ``// return the x, else 0 ` `    ``if``(cr*cr*cr==(``double``)x) ``return` `x; ` `    ``return` `0; ` `} ` `  `  `// Function to precompute the perfect ` `// Cubes upto 100000. ` `static` `void` `compute() ` `{ ` `    ``for` `(``long` `i = 1; i <= 100000; ++i) { ` `        ``pref[i] = pref[i - 1] ` `                  ``+ isPerfectCube(i); ` `    ``} ` `} ` `  `  `// Function to print the sum for each query ` `static` `void` `printSum(``int` `L, ``int` `R) ` `{ ` `    ``long` `sum = pref[R] - pref[L - 1]; ` `    ``Console.Write(sum+``" "``); ` `} ` `  `  `// Driver code ` `public` `static` `void` `Main()  ` `  ``{  ` `    ``// To calculate the precompute function ` `    ``compute(); ` `  `  `    ``int` `Q = 4; ` `    ``int` `[,] arr = ``new` `int``[,]{ { 1, 10 }, ` `                            ``{ 1, 100 }, ` `                            ``{ 2, 25 }, ` `                            ``{ 4, 50 } }; ` `  `  `    ``// Calling the printSum function ` `    ``// for every query ` `    ``for` `(``int` `i = 0; i < Q; i++) { ` `        ``printSum(arr[i,0], arr[i,1]); ` `    ``} ` `  ``} ` `}   ` ` `  `// This code is contributed by mohit kumar 29 `

Output:

```9 100 8 35
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.