Tuesday, November 26, 2024
Google search engine
HomeData Modelling & AIDivide N into K parts in the form (X, 2X, … ,...

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.

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,
=>  X_{1} + X_{2} + X_{3} + ... +  X_{K} = N
=> X_{1} + 2*X_{1} + 3*X_{1} + ... +  K*X_{1} = N
=> X_{1}( 1 + 2 + 3 + ... + K) = N
=> X_{1} * \frac{K*(K+1))}{2} = N, where ( 1 + 2 + 3 + … + K) = \frac{K*(K+1))}{2}
=> X_{1} =  \frac{2*N}{K*(K+1)}

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 the values print them.

Below is the implementation of above approach:

C++




// C++ program for the above approach
#include <iostream>
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)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments