# Divide N into K parts in the form (X, 2X, … , KX) for some value of X

Given a positive integer N and K, the task is to divide N into K parts such that the first part has a value X, the second part is 2X, and so on for some value of X. If such division is not possible then print -1.

Examples:

Input: N = 10, K = 4
Output: 1 2 3 4
Explanation:
If we take 1 as first number second number will be 2 third number will be 3 times first which is 3 and the last number will be 4 times third number so last number is 4. We can note that sum=1+2+3+4=10 which is the required sum.

Input N = 10, K = 3
Output: -1
Explanation:
Distributing N in 3 parts with given constraint is not possible.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: To solve the problem mentioned above let’s to understand it’s mathematical implementation. Let the division be X1, X2, X3 up to XK where the second integer is X1 * 2, third one is X1 * 3 and the Kth one is X1 * K.

We know that,
=>
=>
=>
=> , where ( 1 + 2 + 3 + … + K) =
=>

So to solve the problem we have to follow the steps given below:

• Calculate the value of K * (K + 1) and divide 2 * N by K * (K + 1) in order to get value of X1.
• If X1 is not an integer in the above step then print -1 as there is no such division is possible.
• To get the value of X2 we will multiply X1 by 2. Similarly, to get XK multiply X1 with K.
• After finding all teh values print them.

Below is the implementation of above approach:

## C++

 // C++ program for the above approach  #include  using namespace std;  typedef long long int ll;     // Function to find the division  void solve(int n, int k)  {      int x1, d;         // Calculating value of x1      d = k * (k + 1);         // Print -1 if division      // is not possible      if ((2 * n) % d != 0) {          cout << "-1";          return;      }         x1 = 2 * n / d;         // Get the first number ie x1      // then successively multiply      // it by x1 k times by index number      // to get the required answer      for (int i = 1; i <= k; i++) {          cout << x1 * i << " ";      }      cout << endl;  }     // Driver Code  int main()  {      // Given N and K      int n = 10, k = 4;         // Function Call      solve(n, k);  }

## Java

 // Java program for the above approach  import java.util.*;  class GFG{     // Function to find the division  static void solve(int n, int k)  {      int x1, d;         // Calculating value of x1      d = k * (k + 1);         // Print -1 if division      // is not possible      if ((2 * n) % d != 0)       {          System.out.print("-1");          return;      }         x1 = 2 * n / d;         // Get the first number ie x1      // then successively multiply      // it by x1 k times by index number      // to get the required answer      for (int i = 1; i <= k; i++)       {          System.out.print(x1 * i+ " ");      }      System.out.println();  }     // Driver Code  public static void main(String[] args)  {      // Given N and K      int n = 10, k = 4;         // Function Call      solve(n, k);  }  }     // This code is contributed by 29AjayKumar

## Python3

 # Python3 program for the above approach     # Function to find the division  def solve(n, k):         # Calculating value of x1      d = k * (k + 1);         # Print -1 if division      # is not possible      if ((2 * n) % d != 0):          print("-1");          return;                x1 = 2 * n // d;         # Get the first number ie x1      # then successively multiply      # it by x1 k times by index number      # to get the required answer      for i in range(1, k + 1):          print(x1 * i, end = " ");     # Driver Code     # Given N and K  n = 10; k = 4;     # Function Call  solve(n, k);     # This code is contributed by Code_Mech

## C#

 // Java program for the above approach  import java.util.*;  class GFG{     // Function to find the division  static void solve(int n, int k)  {      int x1, d;         // Calculating value of x1      d = k * (k + 1);         // Print -1 if division      // is not possible      if ((2 * n) % d != 0)       {          System.out.print("-1");          return;      }         x1 = 2 * n / d;         // Get the first number ie x1      // then successively multiply      // it by x1 k times by index number      // to get the required answer      for (int i = 1; i <= k; i++)       {          System.out.print(x1 * i+ " ");      }      System.out.println();  }     // Driver Code  public static void main(String[] args)  {      // Given N and K      int n = 10, k = 4;         // Function Call      solve(n, k);  }  }     // This code is contributed by 29AjayKumar

Output:

1 2 3 4


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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : 29AjayKumar, Code_Mech