0votos

triplete pitagórico en Haskell

por josejuan hace 1 año

Se obtienen todas las soluciones para cualquier K (no sólo K=1000)

Haber papus :D, díganme sus respuestas...

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
{- 
 
    Nos dicen que debe ser 
 
[1]        a + b + c = K 
[2]        a^2 + b^2 = c^2 
 
    eliminando `c` y despejando `b`, tenemos que 
 
        a = (K^2 - 2Kb) / 2(K - b) 
 
    por [1] además, sabemos que una cota superior de `b` es K/3 
 
-} 
solucion k = [(a, b, k - a - b) | b <- [1..k `div` 3], let (a, m) = (k^2 - 2 * k * b) `divMod` (2 * (k - b)), m == 0] 
 
 
 
{- 
    Por ejemplo, para sacar todas las soluciones para cualquier K con solución: 
 
> mapM_ print [(k, xs) | k <- [1..], let xs = solucion k, not (null xs)] 
(12,[(4,3,5),(3,4,5)]) 
(24,[(8,6,10),(6,8,10)]) 
(30,[(12,5,13)]) 
(36,[(12,9,15),(9,12,15)]) 
(40,[(15,8,17)]) 
(48,[(16,12,20),(12,16,20)]) 
(56,[(24,7,25)]) 
(60,[(24,10,26),(20,15,25),(15,20,25)]) 
(70,[(21,20,29),(20,21,29)]) 
(72,[(24,18,30),(18,24,30)]) 
(80,[(30,16,34)]) 
(84,[(35,12,37),(28,21,35),(21,28,35)]) 
(90,[(40,9,41),(36,15,39)]) 
(96,[(32,24,40),(24,32,40)]) 
... 
... 
(990,[(440,99,451),(396,165,429),(385,180,425),(315,264,411),(264,315,411)]) 
(992,[(480,31,481)]) 
(996,[(332,249,415),(249,332,415)]) 
(1000,[(375,200,425)]) 
(1008,[(441,112,455),(432,126,450),(420,144,444),(360,224,424),(336,252,420),(252,336,420)]) 
(1012,[(483,44,485)]) 
(1020,[(442,120,458),(420,153,447),(408,170,442),(340,255,425),(255,340,425)]) 
(1026,[(304,297,425),(297,304,425)]) 
(1032,[(344,258,430),(258,344,430)]) 
(1040,[(400,195,445),(390,208,442),(364,240,436)]) 
(1044,[(396,203,445),(348,261,435),(261,348,435)]) 
(1050,[(425,168,457),(420,175,455),(315,300,435),(300,315,435)]) 
(1054,[(476,93,485)]) 
(1056,[(480,88,488),(352,264,440),(330,288,438),(288,330,438),(264,352,440)]) 
(1064,[(456,133,475),(342,280,442),(280,342,442)]) 
(1068,[(356,267,445),(267,356,445)]) 
(1078,[(392,231,455)]) 
(1080,[(480,108,492),(432,180,468),(405,216,459),(360,270,450),(351,280,449),(280,351,449),(270,360,450)]) 
(1088,[(510,64,514)]) 
(1092,[(504,78,510),(455,156,481),(416,210,466),(364,273,455),(273,364,455)]) 
(1100,[(495,100,505),(475,132,493)]) 
 
-} 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.