1votos

Sucesión Lucas en Haskell

por josejuan hace 2 años

Las sucesiones de Lucas (básicamente Un y Vn) también para polinomios.

Sucesión Lucas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
{-# LANGUAGE BangPatterns #-} 
import Math.Polynomial 
 
-- dado el generador 
gen !a !b = a: gen b (a + b) 
 
-- los números de lucas son (ej. lucas 2 1 = [2,1,3,4,7,11,18,29,47,...) 
lucas = gen 2 1 
 
 
 
 
 
-- sin embargo, el enunciado solicita las sucesiones de lucas, éstas son 
u = g 0 1 
v p = g 2 p p 
 
g a b p q = a: g a b where g !a !b = b: g b c where c = (p × b - q × a) -- (generador) 
 
-- ya está 
 
 
 
 
-- algunas sucesiones de números o polinómios famosas a partir de éstas son 
 
-- Un(1,−1): Números de Fibonacci 
fibonacci = u 1 (-1) 
 
-- Vn(1,−1): Números de Lucas 
lucasnums = v 1 (-1) 
 
-- Un(2,−1): Números de Pell 
pellnums = u 2 (-1) 
 
-- Vn(2,−1): Números de Pell-Lucas 
pelucas = v 2 (-1) 
 
-- Un(1,−2): Números de Jacobsthal 
jacobsthal = u 1 (-2) 
 
-- Vn(1,−2): Números de Jacobsthal-Lucas 
jacolucas = v 1 (-2) 
 
-- Un(3, 2): Números de Mersenne 2n − 1 
mersenne = u 3 2 
 
-- Vn(3, 2): Números de la forma 2n + 1, que incluye los números de Fermat(Yubuta, 2001). 
fermatYubuta = v 3 2 
 
-- Un(x,−1): Polinomios de Fibonacci 
fiboPolys = u x (fromInteger (-1)) 
 
-- Vn(x,−1): Polinomios de Lucas 
lucasPolys = v x (fromInteger (-1)) 
 
-- Un(x+1, x): Repitunos en base x 
repitunos = u (x + one) x 
 
 
 
 
 
 
-- instancia Num para polys 
instance (Num a, Eq a) ⇒ Num (Poly a) where 
    (+) = addPoly 
    (×) = multPoly 
    negate = negatePoly 
    abs = ⊥ 
    signum = ⊥ 
    fromInteger i = scalePoly (fromInteger i) x 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.