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:

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
Recommended Articles
Page :