The sequence first consists of all the odd from 1 to n and then remaining even numbers 2 up to n. Let’s suppose we have n as 00. Then the sequence becomes 1 3 5 7….999 2 4 ….1000

We are given a (L, R), we need to find of numbers of this sequence in given range.

Note: Here the range is given as (L, R) L and R are included in the rangee

Examples:

Input  : n = 10
         Range 1 6
Output : 27
Explanation:
Sequence is 1 3 5 7 9 2 4 6 8 10
Sum in range (2, 6) 
= 1 + 3 + 5 + 7 + 9 + 2 
= 27

Input  : n = 5
         Range 1 2
Output : 4
Explanation:
sequence is 1 3 5 2 4
sum = 1 + 3 = 4

The idea is to first find sum of numbers before left(excluding left), then find sum of numbers before right (including right). We get result as second sum minus first sum.

How to find sum till a limit?
We first count how many odd numbers are there, then we use formulas for sum of odd natural numbers and sum of even natural numbers to find the result.

How to find count of odd numbers?

  • If n is odd then the number of odd numbers are ((n/2) + 1)
  • If n is even then number of odd numbers are (n/2)

By simple observation, we get the number of odd numbers is ceil(n/2). So, the number of even numbers are n – ceil(n/2).

  • Sum of first N odd numbers is (N^2)
  • Sum of first N even numbers is (N^2) + N

For a given number x how will we find the sum in the sequence from 1 to x?
let’s suppose x is less than the number of odd numbers.

  • Then we simply return (x*x)

If the x is greater then the number of odd numbers

  • var = x-odd;
  • That means we need first var even numbers
  • we return (odd*odd) + (var*var) + var;
  • // CPP program to find sum in the given range in
    // the sequence 1 3 5 7.....N 2 4 6...N-1
    #include <bits/stdc++.h>
    using namespace std;
    
    // For our convenience
    #define ll long long
    
    // Function that returns sum
    // in the range 1 to x in the
    // sequence 1 3 5 7.....N 2 4 6...N-1
    ll sumTillX(ll x, ll n)
    {
        // number of odd numbers
        ll odd = ceil(n / 2.0);
    
        if (x <= odd)
           return x * x;
    
        // number of extra even 
        // numbers required
        ll even = x - odd;
    
        return ((odd * odd) + (even * even) + even);
    }
    
    int rangeSum(int N, int L, int R)
    {
       return sumTillX(R, N) - sumTillX(L-1, N);
    }
    
    // Driver code
    int main()
    {
        ll N = 10, L = 1, R = 6;    
        cout << rangeSum(N, L, R);
        return 0;
    }
    


    There is a difference between I CAN and CAN I

    email pawanasipugmailcom

    phone 7278786219


    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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

    Please write to us at contribute@geeksforgeeks.org to report any issue with the above .







    Source link
    thanks you RSS link
    ( https://www.geeksforgeeks.org/sum-of-range-in-a-series-of-first-odd-then-even-natural-numbers/)

    LEAVE A REPLY

    Please enter your comment!
    Please enter your name here