El máximo común divisor (MCD) de ayb es el número más grande que los divide a ambos sin resto.
Una forma de encontrar el MCD de dos números es el algoritmo de Euclides, que se basa en la observación de que si r
es el resto cuando a
se divide por b
, entonces gcd(a, b) = gcd(b, r)
. Como caso base, podemos usar gcd(a, 0) = a
.
Escribir una llamada mcd función que toma parámetros a
y b
devuelve su máximo común divisor.
Respuestas:
Está en la biblioteca estándar .
Código fuente del
inspect
módulo en Python 2.7:A partir de Python 3.5,
gcd
está en elmath
módulo ; el quefractions
está en está obsoleto. Además,inspect.getsource
ya no devuelve código fuente explicativo para ninguno de los métodos.fuente
fractions.gcd(1, -1)
es ,-1
pero es1 > -1
decir,1
divide a ambos1
y-1
sin resto y es más grande que-1
, consulte bugs.python.org/issue22477gcd(1, -1) == -1
que me parece totalmente legítimo.fractions.gcd()
como está (funciona en elementos de anillo euclidianos).math.gcd(1, -1)
regresa1
.Los algoritmos con mn pueden durar mucho.
Este funciona mucho mejor:
fuente
x
antes de ser asignada. Que ha asignadoy
ax
la primera , por lo que ahoray
se va a establecer en0
(comoy % y
siempre es 0).Esta versión de código utiliza el algoritmo de Euclid para encontrar GCD.
fuente
def gcd(a, b): if b == 0: return a return gcd(b, a % b)
fuente
fuente
Solución muy concisa usando recursividad:
fuente
usando recursividad ,
usando mientras ,
usando lambda,
fuente
Un enfoque diferente basado en el algoritmo de Euclid.
fuente
fuente
Creo que otra forma es usar la recursividad. Aquí está mi código:
fuente
gcd(10,5)
...en python con recursividad:
fuente
fuente
Para
a>b
:Para cualquiera
a>b
oa<b
:fuente
b, a = a, b
. intente leer más sobre el idiomaTuve que hacer algo como esto para una tarea con bucles while. No es la forma más eficiente, pero si no desea utilizar una función, esto funciona:
fuente
fuente
Este código calcula el mcd de más de dos números dependiendo de la elección dada por # el usuario, aquí el usuario da el número
fuente
El intercambio de valor no funcionó bien para mí. Así que configuré una situación similar a un espejo para los números que se ingresan en a <b O a> b:
fuente
mayor_devisor_común (A)
fuente
fuente
break
intenta lograr esa declaración.Aquí está la solución que implementa el concepto de
Iteration
:fuente