Introducción al algoritmo euclidiano para encontrar el máximo común divisor de dos números enteros (implementado en C++)

Introducción al algoritmo euclidiano para encontrar el máximo común divisor de dos números enteros (implementado en C++)

El algoritmo euclidiano encuentra el máximo común divisor (MCD) de dos números enteros. Algoritmo euclidiano, también conocido como división euclidiana.

La idea básica del algoritmo de Euclidian es utilizar la propiedad del resto de la división de dos números: si dos números a y b tienen un divisor común c, entonces el resto de a/b debe ser el resto de c/b. Por lo tanto, podemos seguir dividiendo números más grandes entre números más pequeños hasta que el resto sea 0, momento en el que el divisor es el máximo común divisor de los dos números de entrada.

El proceso del algoritmo es el siguiente:

Determine dos números, sea el número mayor A y el número menor B.

Divide A por B para obtener el resto r. Sean B y r A y B para la nueva ronda.

Repita el paso 2 hasta que el resto r sea 0. En este momento, B es el máximo común divisor de A y B.

Por ejemplo, para calcular el máximo común divisor de 28 y 16, harías lo siguiente:

28 ÷ 16 = 1…12 (el cociente es 1 y el resto es 12)

16 ÷ 12 = 1…4 (el cociente es 1 y el resto es 4)

12 ÷ 4 = 3 …… 0 (el cociente es 3, el resto es 0, fin)

Calcular el máximo común divisor 4 de 28 y 16

A continuación se muestran varias formas de escribir implementaciones en C++ para encontrar el máximo común divisor de dos números enteros utilizando el algoritmo euclidiano.

Método 1. El código fuente es el siguiente:

#include <iostream>
using namespace std;

int main(){
	int m, n, gcd;
	cin>>m>>n;
	gcd = m > n ? n : m; // 初始化gcd为m和n中较小的数	
	while (gcd > 1 && (m % gcd != 0 || n % gcd != 0)) //当gcd大于1且m和n都无法整除gcd时执行循环
	    gcd--;
	cout << gcd <<endl;
	
	return 0;    
}

Este método de escritura utiliza operadores ternarios y operadores lógicos, lo cual es relativamente conciso, pero puede reducir la legibilidad del código.

La lógica de este código es:

Leer en dos números enteros my n.

Inicialice el máximo común divisor mcd al mayor entre my n.

Si mcd es mayor que 1 y mo n no es divisible por mcd, disminuya mcd en 1 y repita este proceso hasta que mcd sea igual a 1 o m y n sean divisibles por mcd.

Genere el mcd final, que es el máximo común divisor de my n.

Método 2. El código fuente es el siguiente:

#include<iostream>
using namespace std;

int main(){
	int m , n;
	cin >> m >> n;
	int r = m % n;
	while( r != 0 ){
		m = n;
		n = r;
		r = m % n;
	}
	cout << n << endl;
	
	return 0;
}

Esta es una forma común de escribir.

La lógica de este código es:

Leer en dos números enteros my n.

Calcula el resto r cuando m se divide por n.

Si r no es igual a 0, asigne n a m, asigne r a n y luego calcule el resto r de m dividido por n nuevamente y repita este proceso hasta que r sea igual a 0.

Genere el n final, que es el máximo común divisor de my n.

Método 3. El código fuente es el siguiente:

#include<iostream>
using namespace std;

int gcd(int a, int b) {  
    if (b == 0) {  
        return a;  
    } else {  
        return gcd(b, a % b);  
    }  
}

int main(){
	int m , n;
	cin >> m >> n;	
	cout << gcd(m , n) << endl;
	
	return 0;
}

Esta es una forma recursiva de escribir.

La lógica del código es la siguiente:

Se define una función llamada mcd, que toma dos parámetros enteros ayb y devuelve su máximo común divisor.

En la función gcd, primero verifique si b es 0. Si es así, devuelve a como máximo común divisor. De lo contrario, llame a la función gcd de forma recursiva, tomando b como primer parámetro y a% b como segundo parámetro.

En la función principal, primero se leen dos números enteros myn de la entrada del usuario. Luego llame a la función gcd, pasándole myn como parámetros. Finalmente, el máximo común divisor calculado se muestra en la pantalla.

Supongo que te gusta

Origin blog.csdn.net/cnds123/article/details/132617933
Recomendado
Clasificación