Advertisement
Guest User

TP1 Taller

a guest
Sep 24th, 2022
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
  24.  
  25. -----------------------------------------------------------------------
  26. -- Funciones extra
  27. maximoComunDivisor :: Integer -> Integer -> Integer
  28. maximoComunDivisor a 0 = a
  29. maximoComunDivisor a b = maximoComunDivisor b (a `mod` b)
  30.  
  31. menorDivisor :: Integer -> Integer -> Integer
  32. menorDivisor n m | n == 1 = 1
  33.                  | n `mod` m == 0 = m
  34.                  | otherwise = menorDivisor n (m+1)
  35.  
  36. esPrimo :: Integer -> Bool
  37. esPrimo 1 = False
  38. esPrimo n = menorDivisor n 2 == n
  39.  
  40. esAPseudoPrimo :: Integer -> Integer -> Bool
  41. esAPseudoPrimo a n = (a^(n-1)-1) `mod` n == 0 && not (esPrimo n)
  42.  
  43. es3PseudoPrimo :: Integer -> Bool
  44. es3PseudoPrimo n = esAPseudoPrimo 3 n
  45.  
  46. contador3PseudoPrimos :: Integer -> Integer -> Integer
  47. contador3PseudoPrimos n m | n == 1 = m
  48.                           | es3PseudoPrimo n = contador3PseudoPrimos (n-1) (m+1)
  49.                           | otherwise = contador3PseudoPrimos (n-1) m
  50.  
  51. contadorKEsimo2y3Pseudoprimo :: Integer -> Integer -> Integer -> Integer
  52. contadorKEsimo2y3Pseudoprimo n m k | n == 0 = k
  53.                                    | es2PseudoPrimo m && es3PseudoPrimo m = contadorKEsimo2y3Pseudoprimo (n-1) (m+1) m
  54.                                    | otherwise = contadorKEsimo2y3Pseudoprimo n (m+1) k
  55.  
  56. contadorCarmichael :: Integer -> Integer -> Bool
  57. contadorCarmichael n m | m == 0 = True
  58.                        | sonCoprimos m n && (esAPseudoPrimo m n) = contadorCarmichael n (m-1)
  59.                        | sonCoprimos m n && not (esAPseudoPrimo m n) = False
  60.                        | otherwise = contadorCarmichael n (m-1)
  61.  
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement