# Find K consecutive integers such that their sum is N

• Difficulty Level : Medium
• Last Updated : 09 Aug, 2022

Given two integers N and K, the task is to find K consecutive integers such that their sum if N.
Note: If there is no such K integers print -1.
Examples:

Input: N = 15, K = 5
Output: 1 2 3 4 5
Explanation:
N can be represented as sum of 5 consecutive integers as follows –
=> N => 1 + 2 + 3 + 4 + 5 = 15
Input: N = 33, K = 6
Output: 3 4 5 6 7 8
Explanation:
N can be represented as sum of 6 consecutive integers as follows –
=> N => 3 + 4 + 5 + 6 + 7 + 8 = 33

Naive Approach: A simple solution is to run a loop from i = 0 to N – (K – 1) to check if K consecutive integers starting from i is having sum as N.
Efficient Approach: The idea is to use Arithmetic Progression to solve this problem, where sum of K terms of arithmetic progression with common difference is 1 can be defined as follows –

1. Sum of K Terms –
=>

2. Solving the equation further to get the first term possible
=>

3. Here aK is the Kth term which can be written as a1 + K – 1
=>
=>

4. Finally, check the first term computed is an integer, If yes then K consecutive number exists whose sum if N.

Below is the implementation of the above approach:

## C++

 // C++ implementation to check if // a number can be expressed as // sum of K consecutive integer   #include  using namespace std;   // Function to check if a number can be // expressed as the sum of k consecutive void checksum(int n, int k) {     // Finding the first     // term of AP     float first_term = ((2 * n) / k                         + (1 - k))                        / 2.0;       // Checking if first     // term is an integer     if (first_term - int(first_term) == 0) {           // Loop to print the K         // consecutive integers         for (int i = first_term;              i <= first_term + k - 1; i++) {             cout << i << " ";         }     }     else         cout << "-1"; }   // Driver Code int main() {     int n = 33, k = 6;     checksum(n, k);     return 0; }

## Java

 // Java implementation to check if // a number can be expressed as // sum of K consecutive integer class GFG{   // Function to check if a number can be // expressed as the sum of k consecutive static void checksum(int n, int k) {           // Finding the first     // term of AP     float first_term = (float) (((2 * n) / k +                                   (1 - k)) / 2.0);       // Checking if first     // term is an integer     if (first_term - (int)(first_term) == 0)     {           // Loop to print the K         // consecutive integers         for(int i = (int)first_term;              i <= first_term + k - 1; i++)         {            System.out.print(i + " ");         }     }     else         System.out.print("-1"); }   // Driver Code public static void main(String[] args) {     int n = 33, k = 6;           checksum(n, k); } }   // This code is contributed by 29AjayKumar

## Python3

 # Python3 implementation to check   # if a number can be expressed as  # sum of K consecutive integer    # Function to check if a number can be  # expressed as the sum of k consecutive  def checksum(n, k):           # Finding the first      # term of AP      first_term = ((2 * n) / k + (1 - k)) / 2.0           # Checking if first      # term is an integer      if (first_term - int(first_term) == 0):                   # Loop to print the K          # consecutive integers          for i in range(int(first_term),                        int(first_term) + k):             print(i, end = ' ')     else:         print('-1')   # Driver Code  if __name__=='__main__':           (n, k) = (33, 6)     checksum(n, k)   # This code is contributed by rutvik_56

## C#

 // C# implementation to check if // a number can be expressed as // sum of K consecutive integer using System; class GFG{   // Function to check if a number can be // expressed as the sum of k consecutive static void checksum(int n, int k) {           // Finding the first     // term of AP     float first_term = (float)(((2 * n) / k +                                  (1 - k)) / 2.0);       // Checking if first     // term is an integer     if (first_term - (int)(first_term) == 0)     {           // Loop to print the K         // consecutive integers         for(int i = (int)first_term;                  i <= first_term + k - 1; i++)         {             Console.Write(i + " ");         }     }     else         Console.Write("-1"); }   // Driver Code public static void Main(String[] args) {     int n = 33, k = 6;           checksum(n, k); } }   // This code is contributed by sapnasingh4991

## Javascript

 

Output:

3 4 5 6 7 8

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Related Articles