Autor Tema: Teoría de números y Algoritmos secuenciales

0 Usuarios y 1 Visitante están viendo este tema.

10 Noviembre, 2016, 08:47 pm
Leído 1519 veces

joker.poker

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 3
  • Karma: +0/-0
  • Sexo: Masculino
Saludos al foro, el problema que estoy procurando resolver esta orientado al siguiente enunciado:

¿Cuál es el número menor, que dividido entre 2, 3, 4, 5 y 6 tiene como residuo 1, 2, 3, 4 y 5 respectivamente?

Si se delimita el problema al conjunto de los numeros naturales. Es decir:

\( N = 2C_{1}+1 \)
\( N = 3C_{2}+2 \)
\( N = 4C_{3}+3 \)
\( N = 5C_{4}+4 \)
\( N = 6C_{5}+5 \)

Calcular el valor de N, si existiera.

De antemano gracias por la ayuda

10 Noviembre, 2016, 08:54 pm
Respuesta #1

EnRlquE

  • Lathi
  • Mensajes: 5,907
  • País: br
  • Karma: +0/-0
  • Sexo: Masculino
Hola joker.poker.

 Supongamos que \( N \) sea el número. El dato es equivalente a decir que \( N+1 \) es múltiplo de \( 2,3,4 \) y \( 5 \). Si queremos el menor \( N \) entonces basta con hacer que \( N+1 \) sea el mínimo común múltiplo de \( 2,3,4 \) y \( 5. \) Si tienes dudas, pregunta.

Saludos,

Enrique.

10 Noviembre, 2016, 10:05 pm
Respuesta #2

joker.poker

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 3
  • Karma: +0/-0
  • Sexo: Masculino
Gracias por la ayuda Enrique, me sirvio muchísimo para replantear el algoritmo y asi obtener el número buscado, a continuacion lo adjunto como lenguaje en C++.
Para delimitarlo lo acoté entre 7 y 200, los resultados fueron los números 59, 119 y 179 en cuyo caso escogí al menor de los tres (59)

Recomiendo que varien el parámetro de "200" para hallar los siguientes posibles números (por ejemplo hasta el 1000).

Código: [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
    int c, j, R, S, T;
    int A[5]={2,3,4,5,6};
    int B[5]={1,2,3,4,5};
    S=0;
    T=0;
    for (c=7;c<=200;c++)
    {
        for (j=0;j<=4;j++)
        {
            R=c%A[j];
            if (R==B[j])
            {
             T=T+B[j];
              if (T==15)
             cout<<c<<"\n";
             }
        }
        T=0;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

10 Noviembre, 2016, 10:18 pm
Respuesta #3

joker.poker

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 3
  • Karma: +0/-0
  • Sexo: Masculino
Un detalle más:

Formulé la suma de los residuos (1+2+3+4+5) como la condición necesaria para la impresión por pantalla del número buscado.

Inicie con 7, por obvias razones:
Por ejemplo:
 \( 7/2=3  (Cociente)--- 7 mod 2 =1 (Residuo) \)
 \( 7/3=2 (Cociente)--- 7 mod 3 =1(Residuo) \)
 \( 7/4=1 (Cociente)--- 7 mod 4 =3(Residuo) \)
 \( 7/5=1 (Cociente)--- 7 mod 5 =2(Residuo) \)
 \( 7/6=1 (Cociente)--- 7 mod 6 =1(Residuo) \)

y luego continua el el ciclo hasta "n"
Se imprime el número buscado si los Residuos suman 15.
Los datos están almacenados en los vectores A[] y B[] como Divisores y Residuos respectivamente.
Nota: En programacion el operador "mod" extrae el residuo de la division como entero.