Sum of the elements from index L to R in an array when arr[i] = i * (-1)^i

Given two integers and and an array arr[] every element of which at index is calculated as arr[i] = i * (-1)i. The task is to find the sum of these elements of the array within the index range .

Examples:

Input: L = 1 , R = 5
Output: -3
Sum = (-1) + 2 + (-3) + 4 + (-5) = -3

Input: L = 5 , R = 100000000
Output: 49999998

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

Naive Approach: According to the definition of array elements, each odd element of the array is negative and even element is positive. So, to find the sum run a for loop from (L to R) and maintain the sum of all the odd(negative) and even(positive) numbers. Finally, return the sum.

Efficient Approach: It can be noted that the sum of all the odd elements of this series will always be equal to (totalOdd)2 where totalOdd = total number of odd elements and sum of the even numbers will be totalEven * (totalEven + 1). Now, all we have to do is to find the sum of all the odd elements upto L and upto R. Store the difference of both to get the sum of all the odd elements between L and R. Do this same for even numbers and finally return the difference of even and odd sums.

Below is the implementation of the above approach:

C++

 // CPP implementation of above approach #include using namespace std;    // function to return the odd sum long int Odd_Sum(int n) {        // total odd elements upto n     long int total = (n + 1) / 2;        // sum of odd elements upto n     long int odd = total * total;        return odd; }    // function to return the even sum long int Even_Sum(int n) {        // total even elements upto n     long int total = (n) / 2;        // sum of even elements upto n     long int even = total * (total + 1);        return even; }    // Function to find sum from L to R. int sumLtoR(int L, int R) {        long int odd_sum, even_sum;        odd_sum = Odd_Sum(R) - Odd_Sum(L - 1);        even_sum = Even_Sum(R) - Even_Sum(L - 1);        // return final sum from L to R     return even_sum - odd_sum; }    // Driver Program int main() {        int L = 1, R = 5;        // function call to print answer     cout << sumLtoR(L, R);        return 0; }

Java

 // Java implementation of above approach    import java.io.*;    class GFG {              // function to return the odd sum static long  Odd_Sum(int n) {        // total odd elements upto n     long  total = (n + 1) / 2;        // sum of odd elements upto n     long  odd = total * total;        return odd; }    // function to return the even sum static long  Even_Sum(int n) {        // total even elements upto n     long  total = (n) / 2;        // sum of even elements upto n     long  even = total * (total + 1);        return even; }    // Function to find sum from L to R. static long sumLtoR(int L, int R) {        long  odd_sum, even_sum;        odd_sum = Odd_Sum(R) - Odd_Sum(L - 1);        even_sum = Even_Sum(R) - Even_Sum(L - 1);        // return final sum from L to R     return even_sum - odd_sum; }    // Driver Program        public static void main (String[] args) {         int L = 1, R = 5;        // function call to print answer     System.out.println( sumLtoR(L, R));     } } // This code is contributed by shs..

Python3

 # Python3 implementation of above approach    # function to return the odd sum def Odd_Sum(n):        # total odd elements upto n     total =(n+1)//2        # sum of odd elements upto n     odd = total*total     return odd    # function to return the even sum def Even_Sum(n):        # total even elements upto n     total = n//2        # sum of even elements upto n     even = total*(total+1)     return even    def sumLtoR(L,R):     odd_sum = Odd_Sum(R)-Odd_Sum(L-1)     even_sum = Even_Sum(R)- Even_Sum(L-1)        # return final sum from L to R     return even_sum-odd_sum       # Driver code L =1; R = 5 print(sumLtoR(L,R))    # This code is contributed by Shrikant13

C#

 // C# implementation of above approach class GFG {        // function to return the odd sum static long Odd_Sum(int n) {        // total odd elements upto n     long total = (n + 1) / 2;        // sum of odd elements upto n     long odd = total * total;        return odd; }    // function to return the even sum static long Even_Sum(int n) {        // total even elements upto n     long total = (n) / 2;        // sum of even elements upto n     long even = total * (total + 1);        return even; }    // Function to find sum from L to R. static long sumLtoR(int L, int R) {     long odd_sum, even_sum;        odd_sum = Odd_Sum(R) - Odd_Sum(L - 1);        even_sum = Even_Sum(R) - Even_Sum(L - 1);        // return final sum from L to R     return even_sum - odd_sum; }    // Driver Code public static void Main ()  {     int L = 1, R = 5;        // function call to print answer     System.Console.WriteLine(sumLtoR(L, R)); } }    // This code is contributed by mits

PHP

 > 1;        // sum of odd elements upto n     \$odd = \$total * \$total;        return \$odd; }    // function to return the even sum function Even_Sum(\$n) {        // for total even elements upto n     // divide by 2     \$total = \$n >> 1;            // sum of even elements upto n     \$even = \$total * (\$total + 1);        return \$even; }    // Function to find sum from L to R. function sumLtoR(\$L, \$R) {     \$odd_sum = Odd_Sum(\$R) -                 Odd_Sum(\$L - 1);        \$even_sum = Even_Sum(\$R) -                  Even_Sum(\$L - 1);               // print final sum from L to R     return \$even_sum - \$odd_sum ; }    // Driver Code \$L = 1 ; \$R = 5;    // function call to print answer echo sumLtoR(\$L, \$R);    // This code is contributed by ANKITRAI1 ?>

Output:

-3

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.