Wenn wir eine Folge von Zahlen als Koeffizienten einer Potenzreihe schreiben, dann wird diese Potenzreihe die (gewöhnliche) Erzeugungsfunktion (oder Gf) dieser Folge genannt. Das heißt, wenn für einige Funktionen F(x)
und ganze a(n)
Zahlenreihen gilt:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Dann F(x)
ist die erzeugende Funktion von a
. Zum Beispiel sagt uns die geometrische Reihe , dass:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
Die erzeugende Funktion von 1, 1, 1, ...
ist also 1/(1-x)
. Wenn wir beide Seiten der obigen Gleichung unterscheiden und mit multiplizieren, erhalten x
wir die folgende Gleichheit:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
Die erzeugende Funktion von 1, 2, 3, ...
ist also x/(1-x)^2
. Das Generieren von Funktionen ist ein sehr mächtiges Werkzeug, mit dem Sie viele nützliche Dinge tun können. Eine kurze Einführung kann gefunden werden hier , aber für eine wirklich gründliche Erklärung gibt es die erstaunliche Buch generatingfunctionology.
In dieser Challenge nehmen Sie eine rationale Funktion (den Quotienten aus zwei Polynomen mit ganzzahligen Koeffizienten) als Eingabe als zwei Arrays von ganzzahligen Koeffizienten, zuerst den Zähler, dann den Nenner. Zum Beispiel wird die Funktion f(x) = x / (1 - x - x^2)
wie [0, 1], [1, -1, -1]
in der Eingabe codiert .
Anhand dieser Eingabe muss Ihr Programm die Koeffizienten der Potenzreihe, die der Erzeugungsfunktion entspricht, unendlich ausgeben, und zwar eine pro Zeile, beginnend mit dem Koeffizienten von x
, dann x^2
usw.
Beispiele:
[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, ...