Si nous écrivons une séquence de nombres comme coefficients d'une série de puissances, alors cette série de puissances est appelée la fonction génératrice (ordinaire) (ou Gf) de cette séquence. Autrement dit, si pour une fonction F(x)
et une série d'entiers, a(n)
nous avons:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Alors F(x)
est la fonction génératrice de a
. Par exemple, la série géométrique nous dit que:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
Ainsi, la fonction génératrice de 1, 1, 1, ...
est 1/(1-x)
. Si nous différencions les deux côtés de l'équation ci-dessus et multiplions par, x
nous obtenons l'égalité suivante:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
Ainsi, la fonction génératrice de 1, 2, 3, ...
est x/(1-x)^2
. La génération de fonctions est un outil très puissant et vous pouvez faire beaucoup de choses utiles avec elles. Une brève introduction peut être trouvée ici , mais pour une explication vraiment approfondie, il y a l'étonnant livre générant une fonctionnalité.
Dans ce défi, vous prendrez une fonction rationnelle (le quotient de deux polynômes avec des coefficients entiers) comme entrée comme deux tableaux de coefficients entiers, d'abord le numérateur puis le dénominateur. Par exemple, la fonction f(x) = x / (1 - x - x^2)
sera codée comme [0, 1], [1, -1, -1]
dans l'entrée.
Compte tenu de cette entrée, votre programme doit imprimer à l'infini les coefficients de la série de puissance égale à la fonction de génération, un par ligne, en commençant par le coefficient de x
, puis x^2
, etc.
Exemples:
[1], [1, -1] -> 1, 1, 1, 1, 1, 1, 1, ...
[1], [2, -2] -> 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, ...
[0, 1], [1, -2, 1] -> 1, 2, 3, 4, 5, 6, 7, 8, ...
[0, 1], [1, -1, -1] -> 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
[1], [1, -2] -> 1, 2, 4, 8, 16, 32, 64, 128, ...
[0, 1, 1], [1, -3, 3, -1] -> 1, 4, 9, 16, 25, 36, ...