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.