 Open in App
Not now

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

• Last Updated : 30 Jan, 2022

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 squares lying in this range.
Examples:

Input: Q = 2, arr[][] = {{4, 9}, {4, 16}}
Output: 13 29
Explanation:
From 4 to 9: only 4 and 9 are perfect squares. Therefore, 4 + 9 = 13.
From 4 to 16: 4, 9 and 16 are the perfect squares. Therefore, 4 + 9 + 16 = 29.
Input: Q = 4, arr[][] = {{1, 10}, {1, 100}, {2, 25}, {4, 50}}
Output: 14 385 54 139

Approach: The idea is to use a prefix sum array. The sum all squares are precomputed and stored in an array pref[] so that every query can be answered in O(1) time. Every ‘i’th index in the pref[] array represents the sum of perfect squares from 1 to that number. Therefore, the sum of perfect squares from the given range ‘L’ to ‘R’ can be found as follows:

`sum = pref[R] - pref[L - 1]`

Below is the implementation of the above approach:

## CPP

 `// C++ program to find the sum of all` `// perfect squares in the given range`   `#include ` `#define ll int` `using` `namespace` `std;`   `// Array to precompute the sum of squares` `// 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 square or not` `int` `isPerfectSquare(``long` `long` `int` `x)` `{` `    ``// Find floating point value of` `    ``// square root of x.` `    ``long` `double` `sr = ``sqrt``(x);`   `    ``// If square root is an integer` `    ``return` `((sr - ``floor``(sr)) == 0) ? x : 0;` `}`   `// Function to precompute the perfect` `// squares upto 100000.` `void` `compute()` `{` `    ``for` `(``int` `i = 1; i <= 100000; ++i) {` `        ``pref[i] = pref[i - 1]` `                  ``+ isPerfectSquare(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 squares in the given range` `class` `GFG` `{`   `// Array to precompute the sum of squares` `// from 1 to 100010 so that for every` `// query, the answer can be returned in O(1).` `static` `int` `[]pref = ``new` `int``[``100010``];`   `// Function to check if a number is` `// a perfect square or not` `static` `int` `isPerfectSquare(``int` `x)` `{` `    ``// Find floating point value of` `    ``// square root of x.` `    ``double` `sr = Math.sqrt(x);`   `    ``// If square root is an integer` `    ``return` `((sr - Math.floor(sr)) == ``0``) ? x : ``0``;` `}`   `// Function to precompute the perfect` `// squares upto 100000.` `static` `void` `compute()` `{` `    ``for` `(``int` `i = ``1``; i <= ``100000``; ++i) ` `    ``{` `        ``pref[i] = pref[i - ``1``]` `                ``+ isPerfectSquare(i);` `    ``}` `}`   `// Function to print the sum for each query` `static` `void` `printSum(``int` `L, ``int` `R)` `{` `    ``int` `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 PrinciRaj1992`

## Python3

 `# Python3 program to find the sum of all ` `# perfect squares in the given range ` `from` `math ``import` `sqrt, floor`   `# Array to precompute the sum of squares ` `# 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 square or not ` `def` `isPerfectSquare(x) :` `    `  `    ``# Find floating point value of` `    ``# square root of x.` `    ``sr ``=` `sqrt(x);` `    `  `    ``# If square root is an integer` `    ``rslt ``=` `x ``if` `(sr ``-` `floor(sr) ``=``=` `0``) ``else` `0``;` `    ``return` `rslt; `   `# Function to precompute the perfect ` `# squares upto 100000. ` `def` `compute() :`   `    ``for` `i ``in` `range``(``1` `, ``100001``) :` `        ``pref[i] ``=` `pref[i ``-` `1``] ``+` `isPerfectSquare(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 squares in the given range` `using` `System;`   `class` `GFG` `{`   `// Array to precompute the sum of squares` `// from 1 to 100010 so that for every` `// query, the answer can be returned in O(1).` `static` `int` `[]pref = ``new` `int``;`   `// Function to check if a number is` `// a perfect square or not` `static` `int` `isPerfectSquare(``int` `x)` `{` `    ``// Find floating point value of` `    ``// square root of x.` `    ``double` `sr = Math.Sqrt(x);`   `    ``// If square root is an integer` `    ``return` `((sr - Math.Floor(sr)) == 0) ? x : 0;` `}`   `// Function to precompute the perfect` `// squares upto 100000.` `static` `void` `compute()` `{` `    ``for` `(``int` `i = 1; i <= 100000; ++i) ` `    ``{` `        ``pref[i] = pref[i - 1]` `                ``+ isPerfectSquare(i);` `    ``}` `}`   `// Function to print the sum for each query` `static` `void` `printSum(``int` `L, ``int` `R)` `{` `    ``int` `sum = pref[R] - pref[L - 1];` `    ``Console.Write(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 PrinciRaj1992`

## Javascript

 ``

Output:

`14 385 54 139`

Time Complexity: O(Q + 10000 * x)

Auxiliary Space: O(100010)

My Personal Notes arrow_drop_up
Related Articles