Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <functional>
- #include <conio.h>
- using namespace std;
- int contFactPrimos2(int numero, int numero2)
- {
- int i = 2;
- int cantPrimos = 0;
- while ((i < numero || numero / i == 1) || (i < numero2 || numero2 / i == 1))
- { // se utiliza el while para comparar si i es menor o el dividendo del numero es 1 en ambos numeros;
- while (numero % i == 0 || numero2 % i == 0)
- // mientras en uno de los sea positiva la operacion seguira operando con el mismo numero
- {
- if (numero % i == 0)
- {
- numero = numero / i;
- cantPrimos++;
- }
- if (numero2 % i == 0)
- {
- numero2 = numero2 / i;
- cantPrimos++;
- }
- }
- i++; // se incremeta hasta salir del ciclo while anterior
- }
- return cantPrimos;
- }
- int asignarValor(int arreglo[], int posicion, int valor)
- {
- arreglo[posicion] = valor;
- }
- void llenarArregloconPrimos(int arregloFactPrimos[], int numero)
- {
- int i = 2;
- int posicion = 0;
- int ultimoPrimo = 0;
- while (i < numero || numero / i == 1)
- {
- if (numero % i == 0)
- {
- numero = numero / i;
- if (ultimoPrimo != i)
- {
- asignarValor(arregloFactPrimos, posicion, i);
- posicion += 1;
- }
- ultimoPrimo = i;
- }
- else
- {
- i++;
- }
- }
- }
- void llenarArregloconPrimos2(int arregloFactPrimos[], int numero, int numero2)
- {
- int i = 2;
- int posicion = 0;
- while ((i < numero || numero / i == 1) || (i < numero2 || numero2 / i == 1))
- {
- while (numero % i == 0 || numero2 % i == 0)
- {
- if (numero % i == 0)
- {
- numero = numero / i;
- asignarValor(arregloFactPrimos, posicion, i);
- posicion += 1;
- }
- if (numero2 % i == 0)
- {
- numero2 = numero2 / i;
- asignarValor(arregloFactPrimos, posicion, i);
- posicion += 1;
- }
- }
- i++;
- }
- }
- int minimoComunMultiplo(int arreglo[], int numero, int numero2, int cantPrimos)
- {
- int mcm = 1;
- for (int i = 0; i < cantPrimos; i++)
- {
- if (numero % arreglo[i] == 0)
- {
- numero = numero / arreglo[i];
- numero2 = (numero2 % arreglo[i] == 0) ? numero2 / arreglo[i] : numero2 = numero2;
- // Operacion ternaria donde si se puede se divide el segundo numero esto para que no divida nuevamente
- mcm = mcm * arreglo[i];
- }
- else
- {
- if (numero2 % arreglo[i] == 0)
- {
- numero2 = numero2 / arreglo[i];
- mcm = mcm * arreglo[i];
- }
- }
- }
- return mcm;
- }
- int maximoComunDivisor(int arreglo[], int numero, int numero2, int cantPrimos)
- {
- int mcd = 1;
- for (int i = 0; i < cantPrimos; i++)
- {
- if (numero % arreglo[i] == 0 && numero2 % arreglo[i] == 0)
- //Si ambos se cumplen entonces seguira
- {
- numero = numero / arreglo[i];
- numero2 = numero2 / arreglo[i];
- mcd = mcd * arreglo[i];
- }
- }
- return mcd;
- }
- int main()
- {
- int numero, numero2, cantPrimos, mcm, mcd;
- // cout << "ingrese el numero a buscar sus factores primos \n";
- cout << "Calculador de MCD y MCM de 2 numeros \n"
- << "Ingrese el primer digito\n";
- cin >> numero;
- cout << "Ingrese el segundo digito\n";
- cin >> numero2;
- cantPrimos = contFactPrimos2(numero, numero2);
- int factoresPrimos[cantPrimos];
- llenarArregloconPrimos2(factoresPrimos, numero, numero2);
- mcm = minimoComunMultiplo(factoresPrimos, numero, numero2, cantPrimos);
- mcd = maximoComunDivisor(factoresPrimos, numero, numero2, cantPrimos);
- cout << "M.C.M. : " << mcm << endl;
- if (mcd == 1){cout << "No existe MCD";}else{cout << "M.C.D. : " << mcd;}
- //En caso de que los numeros no tengan MCD
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement