Find if given number is sum of first n natural numbers

By | September 28, 2023

There is given a sum and you have to find whether this sum is resultant of summation of first n natural numbers or not. If it is summation of first n natural numbers then simply print value of n if that is not the case then simply print -1.

Examples : 

Input : 15
Output : 5
Explanation : 
sum = 1 + 2 + 3 + 4 + 5
sum = 15

Input : 11
Output : -1
Explanation : 
There is no natural number n for which sum of all natural number 1 to n is 11.

Naive Approach :

Run a loop from 1 and store the summation of i if this sum is equal to given sum then break the loop and print the value of i if sum is greater than given sum then return -1.

Implementation in C++:

// CPP Program to find value 
// of n for which sum of 1 to n
// is given sum
#include <bits/stdc++.h>
using namespace std;

// Function that returns value of n
int find_n(long long int sum) {
    long long int result = 0;

    // If sum is not positive
    // Then return -1;
    if (sum <= 0)
        return -1;

    // Run a loop
    for (int i = 1;; i++) {
        result += i;

        // If given number has been 
        // Found then return number
        if (result == sum)
            return i;

        // If sum not Found
        // return -1
        if (result > sum)
            return -1;
    }
}

// Driver Code
int main(void) {
    int a = 11;
    int b = 15;
    cout << find_n(a) << endl;
    cout << find_n(b) << endl;
    return 0;
}

Output 

 -1
5

The complexity of above problem is about to O(n).

Efficient Approach :

The above problem can be solved easily by using binary search method we know by the formula that the sum of first n natural number is – n * ( n + 1 ) / 2.
We initialize beg = 0 and end = 1000000 and we will find mid if sum of all numbers from 1 to mid is equal to given sum then return mid else if it greater than given sum then decrease high by mid-1 else increase beg by mid+1.
Run above loop while beg is less than or equal to end.

Implementation in C++:

// CPP Program to find value 
// of n for which the sum of 1 to n
// is a given sum
#include <iostream>
using namespace std;

// Function that returns the value of n
int find_n(long long int sum) {
    long long int beg = 0, mid, end = 10000000000, rs;

    // Run the loop while beg is less than or equal to n
    while (beg <= end) {
        // Find the value of mid
        mid = (beg + end + 1) >> 1;

        // Find the sum of all natural numbers from
        // 1 to mid
        rs = mid * (mid + 1) / 2;

        // If the result is found, then return it
        if (rs == sum)
            return mid;

        // If the result lies on the right-hand side
        else if (rs < sum)
            beg = mid + 1;

        // If the result lies on the left-hand side
        else
            end = mid - 1;
    }

    // If the sum is not found
    return -1;
}

// Driver Code
int main(void) {
    int a = 11;
    int b = 15;
    cout << find_n(a) << endl;
    cout << find_n(b) << endl;
    return 0;
}

Output 

-1
5

Time Complexity of above code is about to log(n).

Author: Mithlesh Upadhyay

I hold an M.Tech degree in Artificial Intelligence (2023) from Delhi Technological University (DTU) and possess over 4 years of experience. I worked at GeeksforGeeks, leading teams and managing content, including GATE CS, Test Series, Placements, C, and C++. I've also contributed technical content to companies like MarsDev, Tutorialspoint, StudyTonight, TutorialCup, and Guru99. My skill set includes coding, Data Structures and Algorithms (DSA), and Object-Oriented Programming (OOPs). I'm proficient in C++, Python, JavaScript, HTML, CSS, Bootstrap, React.js, Node.js, MongoDB, Django, and Data Science.