Una estranya sèrie

L’Octubre del 1996 va sortir publicada al New York Times una sèrie matemàtica de nombres enters:

2, 3, 3, 5, 10, 13, 39, 43, 172, 177, 885, 891, 5346, 5353, 37471, …

Aquesta sèrie té com a primer element el 2 i els següents s’obtenen aplicant la regla següent: suma 1, multiplica per 1, suma 2, multiplica per 2, suma 3, multiplica per 3, i així successivament.

Formalment, aquesta sèrie es defineix com:

\[\begin{split}\begin{matrix} a_1 = 2 \\ a_{i} = \begin{cases} a_{i-1} + E[\frac{i}{2}], & \mbox{si } i \mbox{ és parell, } i > 1 \\ a_{i-1} E[\frac{i}{2}], & \mbox{si } i \mbox{ és senar, } i > 1 \end{cases} \\ \end{matrix}\end{split}\]

on \(E[x]\) indica la part entera de x.

També podeu consultar a The On-Line Encyclopedia of Integer Sequences™ (OEIS™).

Deseu en el fitxer estranyaserie.py el generador i la funció següents:

  1. Dissenyeu el generador següent:

    estranyaserie.serie_times()

    Genera els elements d’aquesta sèrie (infinita) de nombre naturals.

    Per exemple:

    >>> it = serie_times()
    >>> for i in range(15):
    ...    print(next(it))
    2
    3
    3
    5
    10
    13
    39
    43
    172
    177
    885
    891
    5346
    5353
    37471
    

    Disposeu de més jocs de proves al fitxer tests-serie-times.txt.

  2. Utilitzeu l’iterador anterior per escriure la funció següent:

    estranyaserie.llista_serie_times(n, m)

    Retorna una llista amb els nombres de la sèrie entre el n-èssim i el m-èssim (ambdós inclosos i entenent que el primer element de la sèrie és el d’índex 1).

    Per exemple:

    >>> llista_serie_times(1, 4)
    [2, 3, 3, 5]
    >>> llista_serie_times(7, 7)
    [39]
    

    Disposeu de més jocs de proves al fitxer tests-llista-serie.txt.

Solució

Disposeu d’una solució al fitxer estranyaserie.py.