Para representar las operaciones binarias en un conjunto finito A con n elementos se pueden numerar sus elementos desde el 0 al n-1. Entonces cada operación binaria en A se puede ver como una lista de listas xss tal que el valor de aplicar la operación a los elementos i y j es el j-ésimo elemento del i-ésimo elemento de xss. Por ejemplo, si A = {0,1,2} entonces las tabla de la suma y de la resta módulo 3 en A son
0 1 2 0 2 1
1 2 0 1 0 2
2 0 1 2 1 0
Suma Resta
Definir las funciones
tablaOperacion :: (Int -> Int -> Int) -> Int -> [[Int]]
tablaSuma :: Int -> [[Int]]
tablaResta :: Int -> [[Int]]
tablaProducto :: Int -> [[Int]]
tales que
- (tablaOperacion f n) es la tabla de la operación f módulo n en [0..n-1]. Por ejemplo,
tablaOperacion (+) 3 == [[0,1,2],[1,2,0],[2,0,1]]
tablaOperacion (-) 3 == [[0,2,1],[1,0,2],[2,1,0]]
tablaOperacion (-) 4 == [[0,3,2,1],[1,0,3,2],[2,1,0,3],[3,2,1,0]]
tablaOperacion (\x y -> abs (x-y)) 3 == [[0,1,2],[1,0,1],[2,1,0]]
- (tablaSuma n) es la tabla de la suma módulo n en [0..n-1]. Por ejemplo,
tablaSuma 3 == [[0,1,2],[1,2,0],[2,0,1]]
tablaSuma 4 == [[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]]
- (tablaResta n) es la tabla de la resta módulo n en [0..n-1]. Por ejemplo,
tablaResta 3 == [[0,2,1],[1,0,2],[2,1,0]]
tablaResta 4 == [[0,3,2,1],[1,0,3,2],[2,1,0,3],[3,2,1,0]]
- (tablaProducto n) es la tabla del producto módulo n en [0..n-1]. Por ejemplo,
tablaProducto 3 == [[0,0,0],[0,1,2],[0,2,1]]
tablaProducto 4 == [[0,0,0,0],[0,1,2,3],[0,2,0,2],[0,3,2,1]]
Comprobar con QuickCheck, si parato entero positivo n de verificar las siguientes propiedades:
- La suma, módulo n, de todos los números de (tablaSuma n) es 0.
- La suma, módulo n, de todos los números de (tablaResta n) es 0.
- La suma, módulo n, de todos los números de (tablaProducto n) es n/2 si n es el doble de un número impar y es 0, en caso contrario.
Leer más…