I1M2012: Definiciones por recursión (3)

En la primera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos concluido el estudio de las definiciones por recursión en Haskell. Concretamente, hemos visto ejemplos de recursión recursión múltiple y de recursión mutua. También hemos comentado el método para construir funciones recursivas.

En la segunda parte hemos comentado la solución del problema 4 (último dígito del producto de números de Fermat).

Las transparencias usadas en la clase son las comprendidas entre las páginas 14 y 24 del tema 6:
Read More “I1M2012: Definiciones por recursión (3)”

I1M2012: Definiciones por recursión (2)

En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos continuado el estudio de las definiciones por recursión en Haskell. Concretamente, hemos visto ejemplos de recursión con guardas, recursión sobre varios argumentos y recursión múltiple.

Las transparencias usadas en la clase son las comprendidas entre las páginas 10 y 13 del tema 6:
Read More “I1M2012: Definiciones por recursión (2)”

I1M2012: Potencias con el último dígito invariante

En la segunda parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos comentado la solución con Haskell de siguiente problema

Calcular el menor número natural n, mayor que 1, tal que para cualquier número entero x se verifique que x y xⁿ terminan en el mismo dígito.

La especificación matemática del enunciado es

min {n∈ℕ | n>1 ∧ ∀x∈ℤ (U(xⁿ) = U(x))}

donde U(x) es el último dígito de x. La especificación se puede reducir a

min {n∈ℕ | n>1 ∧ ∀x∈{0,…,9} (U(xⁿ) = U(x))}

Su traducción a Haskell es

donde (ultimo x) es el último dígito de x

La solución del problema se calcula con

Se puede generalizar solP3 a una función solP3′ que calcula todos los números naturales n, mayores que 1, tales que para cualquier número entero x se verifique que x y xⁿ terminan en el mismo dígito. Para ello, basta eliminar head en la definición de solP3

El cálculo de los 20 primeros es

Se observa que forman una progresión aritmética de diferencia 4. Basándonos en esta observación se puede redefinir solP3′ como sigue

Se puede comprobar experimentalmente la conjetura definiendo la función comprobacion tal que (comprobacion n) se verifica si los n primeros elementos de solP3′ son los mismos que los de solP3”.

La comprobación para los 1000 primeros elementos es

Queda pendiente la demostración de la conjetura.

I1M2012: Números sin coprimos no primos

En la primera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos comentado la solución con Haskell del problema propuesto la Olimpiada Internacional de Matemáticas (IMO) de 1978 cuyo enunciado es

Calcular todos los números naturales n < 1978 con la siguiente propiedad: Si m es un número natural, 1 < m < n, y m y n son coprimos (es decir, el máximo común divisor de m y n es 1), entonces m es un número primo.

La representación matemática del enunciado es

{n∈ℕ | n<1978, ∀m∈ℕ (1 < m < n ∧ mcd(n,m) = 1 ⟶ m es primo}

y su traducción a Haskell es

donde (primo m) se verifica si m es primo

y (factores n) es la lista de los números que dividen a n

La solución del problema se calcula con

Se puede generalizar solP2 a una función solP2′ tal que (solP2′ x) es el conjunto de los números naturales n < x tales que si m es un número natural, 1 < m < n, y m y n son coprimos, entonces m es un número primo.

Por ejemplo,

A la vista de los cálculos anteriores se conjetura que el conjunto de los números naturales n tales que si m es un número natural, 1 < m < n, y m y n son coprimos, entonces m es un número primo es [1,2,3,4,6,8,12,18,24,30].

Queda pendiente la demostración de la conjetura.