Nếu chúng ta viết một chuỗi các con số như các hệ số của một chuỗi lũy thừa, sau đó rằng chuỗi lũy thừa được gọi là (bình thường) chức năng tạo ra (hoặc GF) của chuỗi đó. Đó là, nếu đối với một số chức năng F(x)
và chuỗi số nguyên a(n)
chúng ta có:
a(0) + a(1)x + a(2)x^2 + a(3)x^3 + a(4)x^4 + ... = F(x)
Sau đó F(x)
là chức năng tạo của a
. Ví dụ, loạt hình học cho chúng ta biết rằng:
1 + x + x^2 + x^3 + x^4 + ... = 1/(1-x)
Vì vậy, chức năng tạo ra 1, 1, 1, ...
là 1/(1-x)
. Nếu chúng ta phân biệt cả hai mặt của phương trình trên và nhân với x
chúng ta sẽ có được đẳng thức sau:
x + 2x^2 + 3x^3 + 4x^4 + ... = x/(1-x)^2
Vì vậy, chức năng tạo ra 1, 2, 3, ...
là x/(1-x)^2
. Tạo các hàm là một công cụ rất mạnh và bạn có thể làm nhiều việc hữu ích với chúng. Một giới thiệu ngắn có thể được tìm thấy ở đây , nhưng để giải thích thực sự kỹ lưỡng có chức năng tạo sách tuyệt vời.
Trong thử thách này, bạn sẽ lấy một hàm hữu tỷ (thương số của hai đa thức có hệ số nguyên) làm đầu vào dưới dạng hai mảng hệ số nguyên, đầu tiên là tử số sau đó là mẫu số. Ví dụ, hàm f(x) = x / (1 - x - x^2)
sẽ được mã hóa như [0, 1], [1, -1, -1]
trong đầu vào.
Với đầu vào này, chương trình của bạn phải in vô hạn các hệ số của chuỗi công suất bằng với hàm tạo, mỗi dòng trên một dòng, bắt đầu từ hệ số x
, sau đó x^2
, v.v.
Ví dụ:
[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, ...