Divida N en K partes en la forma (X, 2X, … , KX) para obtener algún valor de X

Dado un número entero positivo N y K , la tarea es dividir N en K partes de modo que la primera parte tenga un valor X , la segunda parte sea 2X , y así sucesivamente para algún valor de X. Si tal división no es posible, imprima -1 .

Ejemplos:

Entrada: N = 10, K = 4
Salida: 1 2 3 4
Explicación:
Si tomamos 1 como primer número, el segundo número será 2, el tercer número será 3 veces el primero, que es 3, y el último número será 4 veces el tercer número, entonces el último número es 4. Podemos notar que sum=1+2+3+4=10 que es la suma requerida.

Entrada N = 10, K = 3
Salida: -1
Explicación:
No es posible distribuir N en 3 partes con la restricción dada.

Enfoque: Para resolver el problema mencionado anteriormente, comprendamos su implementación matemática. Sea la división X 1 , X 2 , X 3 hasta X K donde el segundo entero es X 1 * 2, el tercero es X 1 * 3 y el K-ésimo es X 1 * K.

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

Entonces, para resolver el problema, debemos seguir los pasos que se detallan a continuación:

  • Calcule el valor de K * (K + 1) y divida 2 * N por K * (K + 1) para obtener el valor de X 1 .
  • Si X 1 no es un número entero en el paso anterior, imprima -1 ya que tal división no es posible.
  • Para obtener el valor de X 2 , multiplicaremos X 1 por 2. De manera similar, para obtener X K , multiplique X 1 con K .
  • Después de encontrar todos los valores, imprímalos.

A continuación se muestra la implementación del enfoque anterior:

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
Producción:

1 2 3 4

Complejidad temporal: O(K)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por codebuddy_1903 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *