Nombres triangulars i tetraèdrics¶
Avís
Per a resoldre aquest exercici no es poden fer servir
iteracions (ni for
ni while
), només les
funcions predefinides de Python i les dels
mòduls itertools
, functools
i
operator
. Tampoc es poden fer servir llistes, tuples,
diccionaris ni cap altra estructura de dades per a desar tots els
elements dels iterables.
Els nombres triangulars s’anomenen d’aquesta manera perquè són el nombre d’elements necessaris per crear un triangle equilàter. La sèrie dels nombres triangulars \(\Delta_{n}\) es pot definir de forma senzilla així:
\(\Delta_{n} = \sum_{k=1}^n k\), amb n ≥ 1.
Dissenyeu la funció següent i deseu-la al fitxer iter_nombres.py
:
- iter_nombres.nombres_triangulars()¶
Retorna l’iterador dels nombres triangulars, és a dir \(\Delta_{1}, \Delta_{2}, \Delta_{3}, \cdots\)
Per exemple:
>>> it = nombres_triangulars()
>>> it_20 = itertools.islice(it, 20)
>>> list(it_20)
[1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210]
Per a resoldre aquesta funció recomanem usar
count()
i accumulate()
del
mòdul itertools
.
A la seva vegada, els nombres tetraèdrics \(T_{n}\) s’anomenen així perquè són el nombre d’elements necessaris per a crear una piràmide regular amb una base de tres costats, i són la suma dels n primers nombres triangulars:
\(T_{n} = \sum_{k=1}^n \Delta_{k}\), amb n ≥ 1.
Dissenyeu la funció següent i deseu-la al fitxer iter_nombres.py
:
- iter_nombres.nombres_tetraedrics()¶
Retorna l’iterador dels nombres tetraedrics, és a dir \(T_{1}, T_{2}, T_{3}, \cdots\)
Per exemple:
>>> it = nombres_tetraedrics()
>>> it_20 = itertools.islice(it, 20)
>>> list(it_20)
[1, 4, 10, 20, 35, 56, 84, 120, 165, 220, 286, 364, 455, 560, 680, 816, 969, 1140, 1330, 1540]
Per a resoldre aquesta funció recomanem usar
nombres_triangulars()
i
itertools.accumulate()
.
Disposeu de jocs de proves al fitxer
tests-iter_nombres.txt
i d’una solució a
iter_nombres.py
.