If we write a sequence of numbers as the coefficients of a power series, then that power series is called the (ordinary) generating function (or G.f.) of that sequence. That is, if for some function F(x)
and series of integers a(n)
we have:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Then F(x)
is the generating function of a
. For example, the geometric series tells us that:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
So the generating function of 1, 1, 1, ...
is 1/(1-x)
. If we differentiate both sides of the equation above and multiply by x
we get the following equality:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
So the generating function of 1, 2, 3, ...
is x/(1-x)^2
. Generating functions are a very powerful tool, and you can do many useful things with them. A short introduction can be found here, but for a really thorough explanation there is the amazing book generatingfunctionology.
In this challenge you will take a rational function (the quotient of two polynomials with integer coefficients) as input as two arrays of integer coefficients, first the numerator then the denominator. For example the function f(x) = x / (1 - x - x^2)
will be encoded as [0, 1], [1, -1, -1]
in the input.
Given this input your program must infinitely print the coefficients of the power series that equals the generating function, one per line, starting at the coefficient of x
, then x^2
, etc.
Examples:
[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, ...