Advertisement
Namaru

MCD Y MCM de Dos numero

Apr 1st, 2023
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.21 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <functional>
  3. #include <conio.h>
  4.  
  5. using namespace std;
  6.  
  7. int contFactPrimos2(int numero, int numero2)
  8. {
  9.     int i = 2;
  10.     int cantPrimos = 0;  
  11.     while ((i < numero || numero / i == 1) || (i < numero2 || numero2 / i == 1))
  12.     { // se utiliza el while para comparar si i es menor o el dividendo del numero es 1 en ambos numeros;
  13.         while (numero % i == 0 || numero2 % i == 0)
  14.         // mientras en uno de los sea positiva la operacion seguira operando con el mismo numero
  15.         {
  16.             if (numero % i == 0)
  17.             {
  18.                 numero = numero / i;
  19.                 cantPrimos++;
  20.                
  21.             }
  22.             if (numero2 % i == 0)
  23.             {
  24.                 numero2 = numero2 / i;
  25.                 cantPrimos++;
  26.                
  27.             }
  28.         }
  29.         i++; // se incremeta hasta salir del ciclo while anterior
  30.     }
  31.     return cantPrimos;
  32. }
  33.  
  34. int asignarValor(int arreglo[], int posicion, int valor)
  35. {  
  36.     arreglo[posicion] = valor;
  37. }
  38.  
  39. void llenarArregloconPrimos(int arregloFactPrimos[], int numero)
  40. {
  41.     int i = 2;
  42.     int posicion = 0;
  43.     int ultimoPrimo = 0;
  44.     while (i < numero || numero / i == 1)
  45.     {
  46.         if (numero % i == 0)
  47.         {
  48.             numero = numero / i;
  49.             if (ultimoPrimo != i)
  50.             {
  51.                 asignarValor(arregloFactPrimos, posicion, i);
  52.                 posicion += 1;
  53.             }
  54.             ultimoPrimo = i;
  55.         }
  56.         else
  57.         {
  58.             i++;
  59.         }
  60.     }
  61. }
  62.  
  63. void llenarArregloconPrimos2(int arregloFactPrimos[], int numero, int numero2)
  64. {
  65.  
  66.     int i = 2;
  67.     int posicion = 0;
  68.  
  69.     while ((i < numero || numero / i == 1) || (i < numero2 || numero2 / i == 1))
  70.     {
  71.         while (numero % i == 0 || numero2 % i == 0)
  72.         {
  73.             if (numero % i == 0)
  74.             {
  75.                 numero = numero / i;
  76.                 asignarValor(arregloFactPrimos, posicion, i);
  77.                 posicion += 1;
  78.             }
  79.             if (numero2 % i == 0)
  80.             {
  81.                 numero2 = numero2 / i;
  82.                 asignarValor(arregloFactPrimos, posicion, i);
  83.                 posicion += 1;
  84.             }
  85.         }
  86.         i++;
  87.     }
  88. }
  89.  
  90. int minimoComunMultiplo(int arreglo[], int numero, int numero2, int cantPrimos)
  91. {
  92.     int mcm = 1;
  93.     for (int i = 0; i < cantPrimos; i++)
  94.     {
  95.         if (numero % arreglo[i] == 0)
  96.         {
  97.             numero = numero / arreglo[i];
  98.             numero2 = (numero2 % arreglo[i] == 0) ? numero2 / arreglo[i] : numero2 = numero2;
  99.             // Operacion ternaria donde si se puede se divide el segundo numero esto para que no divida nuevamente
  100.             mcm = mcm * arreglo[i];            
  101.         }
  102.         else
  103.         {
  104.             if (numero2 % arreglo[i] == 0)
  105.             {
  106.                 numero2 = numero2 / arreglo[i];
  107.                 mcm = mcm * arreglo[i];                
  108.             }
  109.         }
  110.     }
  111.     return mcm;
  112. }
  113.  
  114. int maximoComunDivisor(int arreglo[], int numero, int numero2, int cantPrimos)
  115. {
  116.     int mcd = 1;
  117.     for (int i = 0; i < cantPrimos; i++)
  118.     {
  119.         if (numero % arreglo[i] == 0 && numero2 % arreglo[i] == 0)
  120.         //Si ambos se cumplen entonces seguira
  121.         {
  122.             numero = numero / arreglo[i];
  123.             numero2 = numero2 / arreglo[i];
  124.             mcd = mcd * arreglo[i];
  125.         }
  126.     }
  127.     return mcd;
  128. }
  129.  
  130. int main()
  131. {
  132.     int numero, numero2, cantPrimos, mcm, mcd;
  133.     // cout << "ingrese el numero a buscar sus factores primos \n";
  134.     cout << "Calculador de MCD y MCM de 2 numeros \n"
  135.          << "Ingrese el primer digito\n";
  136.     cin >> numero;
  137.     cout << "Ingrese el segundo digito\n";
  138.     cin >> numero2;
  139.     cantPrimos = contFactPrimos2(numero, numero2);  
  140.     int factoresPrimos[cantPrimos];
  141.     llenarArregloconPrimos2(factoresPrimos, numero, numero2);
  142.     mcm = minimoComunMultiplo(factoresPrimos, numero, numero2, cantPrimos);
  143.     mcd = maximoComunDivisor(factoresPrimos, numero, numero2, cantPrimos);
  144.     cout << "M.C.M. : " << mcm << endl;
  145.     if (mcd == 1){cout << "No existe MCD";}else{cout << "M.C.D. : " << mcd;}
  146.     //En caso de que los numeros no tengan MCD    
  147.  
  148.     return 0;
  149. }
  150.  
  151.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement