Práctica Nº 6, Curso 2004/05, Fecha 2/12/2004

1. primo

Definir una función primo :: Integer -> Bool que indique si un número es primo




2. ruffini

Definir una función ruffini :: Float -> [Float] -> Float que a partir de un valor a y los coeficientes de un polinomio devuelve el resto de dividir dicho polinomio entre x - a

?-ruffini 2 [1,1,-1,-1]
9



3. d2b

Definir una función d2b :: Int -> [Int] que convierte un número decimal en su valor binario representado como una lista de ceros y unos

?-d2b 13
[1,1,0,1]



4. b2d

Definir una función b2d :: [Int] -> Int que convierte un número binario representado como una lista de dígitos binarios en su valor decimal

?-d2b [1,1,0,1] 
13



5. Arboles

Definir un tipo de datos que represente árboles binarios y definir varios valores de dicho tipo.




6. Búsqueda (Opcional)

Un árbol binario de búsqueda cumple que en un nodo n cualquiera, todos los hijos dela izquierda son menores que n y todos los de la derecha son mayores que n.




7. Anchura (Opcional)

Definir una función que tome un árbol binario y devuelva la lista de nodos mediante un recorrido en anchura




8. Listas infinitas

Definir funciones que generen las siguientes listas infinitas:




9. Tartaglia (Opcional)

Construir una función que genere el triángulo de Tartaglia. No es necesario realizar la representación gráfica, basta con representar cada fila como una lista de números. Por ejemplo, las 5 primeras filas serían: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1],...




10. Factorizar (Opcional)

Factorizar un número consiste en representarlo como el producto de números primos. Por ejemplo, la factorización del número 665 sería [5,7,19]. Construir la función factoriza :: Integer -> [Integer] que toma un número n y devuelve la lista de números primos cuyo producto es n.

Nota: La factorización de números es la base de los algoritmos de encriptación RSA