 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