Elemento mínimo común en dos sucesiones aritméticas dadas

Dados cuatro números positivos A, B, C, D , tales que A y B son el primer término y la diferencia común de la primera sucesión aritmética respectivamente, mientras que C y D representan lo mismo para la segunda sucesión aritmética respectivamente como se muestra a continuación: 
 

Primera Secuencia Aritmética: A, A + B, A + 2B, A + 3B, …….  
Segunda Secuencia Aritmética: C, C+ D, C+ 2D, C+ 3D, ……. 
 

La tarea es encontrar el elemento menos común de las secuencias AP anteriores. Si no existe tal número, imprima -1 .

Ejemplos:

Entrada: A = 2, B = 20, C = 19, D = 9 
Salida: 82 
Explicación: 
Secuencia 1: {2, 2 + 20, 2 + 2(20), 2 + 3(20), 2 + 4( 20), …..} = {2, 22, 42, 62, 82 , …..} 
Secuencia 2: {19, 19 + 9, 19 + 2(9), 19 + 3(9), 19 + 4 (9), 19 + 5(9), 19 + 6(9), 19 + 7(9) …..} = {19, 28, 37, 46, 55, 64, 73, 82 , …..} 
Por lo tanto, 82 es el elemento común más pequeño.

 

Entrada: A = 2, B = 18, C = 19, D = 9 
Salida: -1

 

Acercarse:

Dado que cualquier término de las dos sucesiones dadas se puede expresar como A + x*B y C+ y*D , por lo tanto, para resolver el problema, necesitamos encontrar los valores más pequeños de x e y para los cuales los dos términos son iguales. 
Siga los pasos a continuación para resolver el problema: 
 

  • Para encontrar el valor común más pequeño en ambas secuencias AP , la idea es encontrar los valores enteros más pequeños de x e y que satisfagan la siguiente ecuación: 
     

A + x*B = C+ y*D

=> La ecuación anterior se puede reorganizar como 
x*B = C – A + y*D
=> La ecuación anterior se puede reorganizar aún más como 
x = (C – A + y*D) / B 
 

  • Compruebe si existe algún valor entero y tal que (C – A + y*D) % B sea 0 o no. Si existe, entonces el número más pequeño es (C+ y*D) .
  • Comprueba si (C+ y*D) es la respuesta o no, donde y estará en un rango (0, B) porque de i = B, B+1, …. los valores restantes se repetirán.
  • Si no se obtiene dicho número de los pasos anteriores, imprima -1 .

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

C++

// C++ program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the smallest element
// common in both the subsequences
long smallestCommon(long a, long b,
                    long c, long d)
{
    // If a is equal to c
    if (a == c)
        return a;
 
    // If a exceeds c
    if (a > c) {
        swap(a, c);
        swap(b, d);
    }
 
    long first_term_diff = (c - a);
    long possible_y;
 
    // Check for the satisfying
    // equation
    for (possible_y = 0; possible_y < b; possible_y++) {
 
        // Least value of possible_y
        // satisfying the given equation
        // will yield true in the below if
        // and break the loop
        if ((first_term_diff % b
             + possible_y * d)
                % b
            == 0) {
            break;
        }
    }
 
    // If the value of possible_y
    // satisfying the given equation
    // lies in range [0, b]
    if (possible_y != b) {
        return c + possible_y * d;
    }
 
    // If no value of possible_y
    // satisfies the given equation
    return -1;
}
 
// Driver Code
int main()
{
    long A = 2, B = 20, C = 19, D = 9;
    cout << smallestCommon(A, B, C, D);
 
    return 0;
}

Java

// Java program to implement
// the above approach
import java.util.*;
class GFG{
 
// Function to find the smallest element
// common in both the subsequences
static int smallestCommon(int a, int b,
                          int c, int d)
{
    // If a is equal to c
    if (a == c)
        return a;
 
    // If a exceeds c
    if (a > c)
    {
        swap(a, c);
        swap(b, d);
    }
 
    int first_term_diff = (c - a);
    int possible_y;
 
    // Check for the satisfying
    // equation
    for (possible_y = 0;
         possible_y < b; possible_y++)
    {
 
        // Least value of possible_y
        // satisfying the given equation
        // will yield true in the below if
        // and break the loop
        if ((first_term_diff % b +
             possible_y * d) % b == 0)
        {
            break;
        }
    }
 
    // If the value of possible_y
    // satisfying the given equation
    // lies in range [0, b]
    if (possible_y != b)
    {
        return c + possible_y * d;
    }
 
    // If no value of possible_y
    // satisfies the given equation
    return -1;
}
   
static void swap(int x, int y)
{
      int temp = x;
      x = y;
      y = temp;
}
   
// Driver Code
public static void main(String[] args)
{
    int A = 2, B = 20, C = 19, D = 9;
    System.out.print(smallestCommon(A, B, C, D));
}
}
 
// This code is contributed by PrinciRaj1992

Python3

# Python3 program to implement
# the above approach
 
# Function to find the smallest element
# common in both the subsequences
def smallestCommon(a, b, c, d):
   
    # If a is equal to c
    if (a == c):
        return a;
 
    # If a exceeds c
    if (a > c):
        swap(a, c);
        swap(b, d);
 
    first_term_diff = (c - a);
    possible_y = 0;
 
    # Check for the satisfying
    # equation
    for possible_y in range(b):
 
        # Least value of possible_y
        # satisfying the given equation
        # will yield True in the below if
        # and break the loop
        if ((first_term_diff % b +
             possible_y * d) % b == 0):
            break;
 
    # If the value of possible_y
    # satisfying the given equation
    # lies in range [0, b]
    if (possible_y != b):
        return c + possible_y * d;
 
    # If no value of possible_y
    # satisfies the given equation
    return -1;
 
def swap(x, y):
    temp = x;
    x = y;
    y = temp;
 
# Driver Code
if __name__ == '__main__':
    A = 2; B = 20; C = 19; D = 9;
    print(smallestCommon(A, B, C, D));
 
# This code is contributed by Rajput-Ji

C#

// C# program to implement
// the above approach
using System;
class GFG{
    
// Function to find the smallest element
// common in both the subsequences
static int smallestCommon(int a, int b,
                          int c, int d)
{
    // If a is equal to c
    if (a == c)
        return a;
 
    // If a exceeds c
    if (a > c)
    {
        swap(a, c);
        swap(b, d);
    }
 
    int first_term_diff = (c - a);
    int possible_y;
 
    // Check for the satisfying
    // equation
    for (possible_y = 0;
         possible_y < b; possible_y++)
    {
 
        // Least value of possible_y
        // satisfying the given equation
        // will yield true in the below if
        // and break the loop
        if ((first_term_diff % b +
             possible_y * d) % b == 0)
        {
            break;
        }
    }
 
    // If the value of possible_y
    // satisfying the given equation
    // lies in range [0, b]
    if (possible_y != b)
    {
        return c + possible_y * d;
    }
 
    // If no value of possible_y
    // satisfies the given equation
    return -1;
}
   
static void swap(int x, int y)
{
      int temp = x;
      x = y;
      y = temp;
}
   
// Driver Code
public static void Main(String[] args)
{
    int A = 2, B = 20, C = 19, D = 9;
    Console.Write(smallestCommon(A, B, C, D));
}
}
 
 
// This code is contributed by Rajput-Ji

Javascript

<script>
// JavaScript program for the
// above approach
 
// Function to find the smallest element
// common in both the subsequences
function smallestCommon(a, b, c, d)
{
    // If a is equal to c
    if (a == c)
        return a;
  
    // If a exceeds c
    if (a > c)
    {
        swap(a, c);
        swap(b, d);
    }
  
    let first_term_diff = (c - a);
    let possible_y;
  
    // Check for the satisfying
    // equation
    for (possible_y = 0;
         possible_y < b; possible_y++)
    {
  
        // Least value of possible_y
        // satisfying the given equation
        // will yield true in the below if
        // and break the loop
        if ((first_term_diff % b +
             possible_y * d) % b == 0)
        {
            break;
        }
    }
  
    // If the value of possible_y
    // satisfying the given equation
    // lies in range [0, b]
    if (possible_y != b)
    {
        return c + possible_y * d;
    }
  
    // If no value of possible_y
    // satisfies the given equation
    return -1;
}
    
function swap(x, y)
{
      let temp = x;
      x = y;
      y = temp;
}
 
// Driver Code
 
    let A = 2, B = 20, C = 19, D = 9;
    document.write(smallestCommon(A, B, C, D));
 
</script>
Producción: 

82

 

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

Publicación traducida automáticamente

Artículo escrito por saideepgummadavelly 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 *