Voor een priemgetal \(p\) is de eindige verzameling \(Z_p = \{0,1,2,...,p-1\}\) een veld. Dit betekent dat optellen, aftrekken, vermenigvuldigen en delen kan gebruikt worden. Elk getal dat je bekomt wordt beperkt tot de eindige verzameling \(Z_p\) door te rekenen modulo \(p\).

In deze oefening worden functies geschreven om te werken met veeltermen in \(Z_{p}[x]\), dit zijn veeltermen met coëfficiënten in \(Z_p\).

Een veelterm \(a_n\,x^n+a_{n-1}x^{n-1}+\ldots+a_2x^2+a_{1}x + a_0\) wordt voorgesteld als een list \([a_n,a_{n-1}\ldots,a_2,a_1, a_0]\) met \(a_i\) ∈ \(Z_p\). De constante staat achteraan, en \(a_n\) ≠ \(0\).

Voorbeelden

\(v = [1,6,2]\) stelt de veelterm \(x^2 + 6x + 2\) voor in \(Z_7\).

\(v = [-1,6,9,2] = [2,0,0,2]\) in \(Z_3\) en stelt de veelterm \(2x^3 + 2\) voor in \(Z_3\).

Opgave

Let op !

Opmerking: Je moet nergens controleren of p een priemgetal is.

Beperkt het aantal if statements - gebruik eventueel een hulpfunctie. Dit wordt apart gecontroleerd in Dodona.

Voorbeeld

>>> veelterm(7, [1,6,2])
x^2 + 6x + 2
>>> veelterm(3, [-1,6,9,2])
2x^3 + 2