# Find the smallest value of N such that sum of first N natural numbers is ≥ X

• Difficulty Level : Medium
• Last Updated : 17 Jun, 2021

Given a positive integer X (1 ≤ X ≤ 106), the task is to find the minimum value N, such that the sum of first N natural numbers is ≥ X.

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Input: X = 14
Output: 5
Explanation: Sum of first 5 natural numbers is 15 which is greater than X( = 14).

• 1 + 2 = 3( < 14)
• 1 + 2 + 3 = 6( < 14)
• 1 + 2 + 3 + 4 = 10( < 15)
• 1 + 2 + 3 + 4 + 5 = 15( > 14)

Input: X = 91
Output: 13

Naive Approach: The simplest approach to solve this problem is to check every value in the range [1, X] and return the first value from this range for which the sum of the first N natural numbers is found to be ≥ X.

Below is the implementation of the above approach:

## C++

 `// C++ Program to implement``// the above approach` `#include ``using` `namespace` `std;` `// Function to check if sum of first``// N natural numbers is >= X``bool` `isGreaterEqual(``int` `N, ``int` `X)``{``    ``return` `(N * 1LL * (N + 1) / 2) >= X;``}` `// Finds minimum value of``// N such that sum of first``// N natural number >= X``int` `minimumPossible(``int` `X)``{``    ``for` `(``int` `i = 1; i <= X; i++) {` `        ``// Check if sum of first i``        ``// natural number >= X``        ``if` `(isGreaterEqual(i, X))``            ``return` `i;``    ``}``}` `// Driver Code``int` `main()``{``    ``// Input``    ``int` `X = 14;` `    ``// Finds minimum value of``    ``// N such that sum of first``    ``// N natural number >= X``    ``cout << minimumPossible(X);``    ``return` `0;``}`

## Java

 `// Java Program to implement``// the above approach``import` `java.io.*;``class` `GFG``{``  ` `  ``// Function to check if sum of first``  ``// N natural numbers is >= X``  ``static` `boolean` `isGreaterEqual(``int` `N, ``int` `X)``  ``{``    ``return` `(N * (N + ``1``) / ``2``) >= X;``  ``}` `  ``// Finds minimum value of``  ``// N such that sum of first``  ``// N natural number >= X``  ``static` `int` `minimumPossible(``int` `X)``  ``{``    ``for` `(``int` `i = ``1``; i <= X; i++)``    ``{` `      ``// Check if sum of first i``      ``// natural number >= X``      ``if` `(isGreaterEqual(i, X))``        ``return` `i;``    ``}``    ``return` `0``;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main (String[] args)``  ``{``    ` `    ``// Input``    ``int` `X = ``14``;` `    ``// Finds minimum value of``    ``// N such that sum of first``    ``// N natural number >= X``    ``System.out.print(minimumPossible(X));``  ``}``}` `// This code is contributed by Dharanendra L V.`

## Python3

 `# Python3 Program to implement``# the above approach` `# Function to check if sum of first``# N natural numbers is >= X``def` `isGreaterEqual(N, X):``    ``return` `(N ``*` `(N ``+` `1``) ``/``/` `2``) >``=` `X` `# Finds minimum value of``# N such that sum of first``# N natural number >= X``def` `minimumPossible(X):` `    ``for` `i ``in` `range``(``1``, X ``+` `1``):` `        ``# Check if sum of first i``        ``# natural number >= X``        ``if` `(isGreaterEqual(i, X)):``            ``return` `i` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``# Input``    ``X ``=` `14` `    ``# Finds minimum value of``    ``# N such that sum of first``    ``# N natural number >= X``    ``print` `(minimumPossible(X))` `    ``# This code is contributed by mohit kumar 29.`

## C#

 `// C# Program to implement``// the above approach``using` `System;``public` `class` `GFG``{` `  ``// Function to check if sum of first``  ``// N natural numbers is >= X``  ``static` `bool` `isGreaterEqual(``int` `N, ``int` `X)``  ``{``    ``return` `(N * (N + 1) / 2) >= X;``  ``}` `  ``// Finds minimum value of``  ``// N such that sum of first``  ``// N natural number >= X``  ``static` `int` `minimumPossible(``int` `X)``  ``{``    ``for` `(``int` `i = 1; i <= X; i++)``    ``{` `      ``// Check if sum of first i``      ``// natural number >= X``      ``if` `(isGreaterEqual(i, X))``        ``return` `i;``    ``}``    ``return` `0;``  ``}` `  ``// Driver Code``  ``static` `public` `void` `Main ()``  ``{` `    ``// Input``    ``int` `X = 14;` `    ``// Finds minimum value of``    ``// N such that sum of first``    ``// N natural number >= X``    ``Console.Write(minimumPossible(X));``  ``}``}` `// This code is contributed by Dharanendra L V.`

## Javascript

 ``
Output:
`5`

Time Complexity : O(N)
Auxiliary Space : O(1)

Efficient Method: Below is the implementation of above approach :

1. The idea is to use binary search to solve this problem.
2. Initialize variables low = 1, high = X and perform binary search on this range.
3. Calculate mid = low + (high – low) / 2 and check if the sum of first mid numbers is greater than or equal to x or not.
4. If sum ≥ X, store it in a variable res and set high = mid-1
5. Otherwise, set low = mid + 1
6. Print res, which is the required answer.

Below is the implementation of the above approach:

## C++

 `#include ``using` `namespace` `std;` `// Function to check if sum of first``// N natural numbers is >= X``bool` `isGreaterEqual(``int` `N, ``int` `X)``{``    ``return` `(N * 1LL * (N + 1) / 2) >= X;``}` `// Finds minimum value of``// N such that sum of first``// N natural number >= X``int` `minimumPossible(``int` `X)``{` `    ``int` `low = 1, high = X, res = -1;` `    ``// Binary Search``    ``while` `(low <= high) {``        ``int` `mid = low + (high - low) / 2;` `        ``// Checks if sum of first 'mid' natural``        ``// numbers is greater than equal to X``        ``if` `(isGreaterEqual(mid, X)) {``            ``// Update res``            ``res = mid;``            ``// Update high``            ``high = mid - 1;``        ``}``        ``else``            ``// Update low``            ``low = mid + 1;``    ``}``    ``return` `res;``}` `// Driver Code``int` `main()``{``    ``// Input``    ``int` `X = 14;` `    ``// Finds minimum value of``    ``// N such that sum of first``    ``// N natural number >= X``    ``cout << minimumPossible(X);``    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;``class` `GFG{` `// Function to check if sum of first``// N natural numbers is >= X``static` `boolean` `isGreaterEqual(``int` `N, ``int` `X)``{``    ``return` `(N  * (N + ``1``) / ``2``) >= X;``}` `// Finds minimum value of``// N such that sum of first``// N natural number >= X``static` `int` `minimumPossible(``int` `X)``{``    ``int` `low = ``1``, high = X, res = -``1``;` `    ``// Binary Search``    ``while` `(low <= high)``    ``{``        ``int` `mid = low + (high - low) / ``2``;` `        ``// Checks if sum of first 'mid' natural``        ``// numbers is greater than equal to X``        ``if` `(isGreaterEqual(mid, X))``        ``{``          ` `            ``// Update res``            ``res = mid;``          ` `            ``// Update high``            ``high = mid - ``1``;``        ``}``        ``else``            ``// Update low``            ``low = mid + ``1``;``    ``}``    ``return` `res;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``  ` `    ``// Input``    ``int` `X = ``14``;` `    ``// Finds minimum value of``    ``// N such that sum of first``    ``// N natural number >= X``    ``System.out.print( minimumPossible(X));``}``}` `// This code is contributed by code_hunt.`

## Python3

 `# Function to check if sum of first``# N natural numbers is >= X``def` `isGreaterEqual(N, X):``    ``return` `(N ``*` `(N ``+` `1``) ``/``/` `2``) >``=` `X;` `# Finds minimum value of``# N such that sum of first``# N natural number >= X``def` `minimumPossible(X):``  ``low ``=` `1``  ``high ``=` `X``  ``res ``=` `-``1``;` `  ``# Binary Search``  ``while` `(low <``=` `high):``        ``mid ``=` `low ``+` `(high ``-` `low) ``/``/` `2``;` `        ``# Checks if sum of first 'mid' natural``        ``# numbers is greater than equal to X``        ``if` `(isGreaterEqual(mid, X)):``          ` `            ``# Update res``            ``res ``=` `mid;``            ` `            ``# Update high``            ``high ``=` `mid ``-` `1``;` `        ``else``:``            ``# Update low``            ``low ``=` `mid ``+` `1``;` `  ``return` `res` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``  ` `    ``# Input``    ``X ``=` `14``;` `    ``# Finds minimum value of``    ``# N such that sum of first``    ``# N natural number >= X``    ``print``(minimumPossible(X));` `    ``# This code is contributed by chitranayal.`

## C#

 `// C# program for the above approach``using` `System;``class` `GFG{` `  ``// Function to check if sum of first``  ``// N natural numbers is >= X``  ``static` `bool` `isGreaterEqual(``int` `N, ``int` `X)``  ``{``    ``return` `(N  * (N + 1) / 2) >= X;``  ``}` `  ``// Finds minimum value of``  ``// N such that sum of first``  ``// N natural number >= X``  ``static` `int` `minimumPossible(``int` `X)``  ``{``    ``int` `low = 1, high = X, res = -1;` `    ``// Binary Search``    ``while` `(low <= high)``    ``{``      ``int` `mid = low + (high - low) / 2;` `      ``// Checks if sum of first 'mid' natural``      ``// numbers is greater than equal to X``      ``if` `(isGreaterEqual(mid, X))``      ``{` `        ``// Update res``        ``res = mid;` `        ``// Update high``        ``high = mid - 1;``      ``}``      ``else``        ``// Update low``        ``low = mid + 1;``    ``}``    ``return` `res;``  ``}`  `  ``// Driver Code``  ``static` `public` `void` `Main()``  ``{``    ``// Input``    ``int` `X = 14;` `    ``// Finds minimum value of``    ``// N such that sum of first``    ``// N natural number >= X``    ``Console.Write( minimumPossible(X));``  ``}``}` `// This code is contributed by susmitakundugoaldanga.`

## Javascript

 ``
Output:
`5`

Time Complexity: O(log(X))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up