SHOW:
|
|
- or go back to the newest paste.
1 | -- Tievoli Bruno | |
2 | -- Riso Santiago | |
3 | -- Gozzi Juan | |
4 | ||
5 | -- EJERCICIO 1. sonCoprimos | |
6 | sonCoprimos :: Integer -> Integer -> Bool | |
7 | sonCoprimos a b = maximoComunDivisor a b == 1 | |
8 | ||
9 | -- EJERCICIO 2. es2PseudoPrimo | |
10 | es2PseudoPrimo :: Integer -> Bool | |
11 | es2PseudoPrimo n = esAPseudoPrimo 2 n | |
12 | ||
13 | -- EJERCICIO 3. cantidad3PseudoPrimos | |
14 | cantidad3PseudoPrimos :: Integer -> Integer | |
15 | cantidad3PseudoPrimos n = contador3PseudoPrimos n 0 | |
16 | ||
17 | -- EJERCICIO 4: kesimo2y3Pseudoprimo | |
18 | kesimo2y3Pseudoprimo :: Integer -> Integer | |
19 | kesimo2y3Pseudoprimo n = contadorKEsimo2y3Pseudoprimo n 2 1 | |
20 | ||
21 | -- EJERCICIO 5: esCarmichael | |
22 | esCarmichael :: Integer -> Bool | |
23 | - | esCarmichael n = contadorCarmichael n n-1 |
23 | + | esCarmichael 1 = False |
24 | esCarmichael n = contadorCarmichael n (n-1) | |
25 | ||
26 | - | -- Funciones extra |
26 | + | |
27 | -- Funciones auxiliares | |
28 | maximoComunDivisor :: Integer -> Integer -> Integer | |
29 | maximoComunDivisor a 0 = a | |
30 | maximoComunDivisor a b = maximoComunDivisor b (a `mod` b) | |
31 | ||
32 | - | menorDivisor n m | n == 1 = 1 |
32 | + | |
33 | - | | n `mod` m == 0 = m |
33 | + | menorDivisor 1 _ = 1 |
34 | menorDivisor n m | n `mod` m == 0 = m | |
35 | | otherwise = menorDivisor n (m+1) | |
36 | ||
37 | esPrimo :: Integer -> Bool | |
38 | esPrimo 1 = False | |
39 | esPrimo n = menorDivisor n 2 == n | |
40 | ||
41 | esAPseudoPrimo :: Integer -> Integer -> Bool | |
42 | esAPseudoPrimo a n = (a^(n-1)-1) `mod` n == 0 && not (esPrimo n) | |
43 | ||
44 | es3PseudoPrimo :: Integer -> Bool | |
45 | es3PseudoPrimo n = esAPseudoPrimo 3 n | |
46 | ||
47 | - | contador3PseudoPrimos n m | n == 1 = m |
47 | + | |
48 | - | | es3PseudoPrimo n = contador3PseudoPrimos (n-1) (m+1) |
48 | + | contador3PseudoPrimos 1 m = m |
49 | contador3PseudoPrimos n m | es3PseudoPrimo n = contador3PseudoPrimos (n-1) (m+1) | |
50 | | otherwise = contador3PseudoPrimos (n-1) m | |
51 | ||
52 | - | contadorKEsimo2y3Pseudoprimo n m k | n == 0 = k |
52 | + | |
53 | - | | es2PseudoPrimo m && es3PseudoPrimo m = contadorKEsimo2y3Pseudoprimo (n-1) (m+1) m |
53 | + | |
54 | contadorKEsimo2y3Pseudoprimo 0 m k = k | |
55 | contadorKEsimo2y3Pseudoprimo n m k | es2PseudoPrimo m && es3PseudoPrimo m = contadorKEsimo2y3Pseudoprimo (n-1) (m+1) m | |
56 | | otherwise = contadorKEsimo2y3Pseudoprimo n (m+1) k | |
57 | - | contadorCarmichael n m | m == 0 = True |
57 | + | |
58 | - | | sonCoprimos m n && (esAPseudoPrimo m n) = contadorCarmichael n (m-1) |
58 | + | |
59 | - | | sonCoprimos m n && not (esAPseudoPrimo m n) = False |
59 | + | |
60 | - | | otherwise = contadorCarmichael n (m-1) |
60 | + | contadorCarmichael n 1 = True |
61 | contadorCarmichael n m | sonCoprimos m n && not (esAPseudoPrimo m n) = False | |
62 | - | |
62 | + | | otherwise = contadorCarmichael n (m-1) |