Polinômios auto-referenciais

12

Para cada grau dado n, é possível construir (pelo menos um) um polinômio integral, de pmodo que p(k)( pavaliado em k) seja o coeficiente do termo x^kno polinômio para todos 0 <= k <= n. Para torná-los únicos, exigimos que o coeficiente inicial (o coeficiente de x^n) seja positivo e mínimo.

Esses polinômios têm algumas propriedades interessantes, você pode encontrar algumas referências no segmento que me inspiraram a fazer esse desafio . Você também pode encontrar esses polinômios em https://oeis.org/A103423

Uma das propriedades inesperadas a priori é como as raízes se comportam dependendo de n:

insira a descrição da imagem aqui

fonte (por / u / zorngov e / u / EpicSauceSc2)

Tarefa

Dada uma nsaída inteira não-negativa, o polinômio integral auto-referencial de grau ncom um coeficiente inicial positivo mínimo.

Detalhes

A saída pode estar em qualquer forma legível por humanos, como string x^2-x-1ou também como uma lista de coeficientes [1,-1,-1]. (A ordem dos coeficientes também pode ser inversa, apenas precisa ser consistente.)

Primeiras saídas

n=0: 1
n=1: x
n=2: x^2-x-1
n=3: 10*x^3-29*x^2-6*x+19
n=4: 57*x^4-325*x^3+287*x^2+423*x-19
n=5: 12813*x^5-120862*x^4+291323*x^3+44088*x^2-355855*x-227362 
flawr
fonte
Parabéns pelo seu distintivo dourado!
Luis Mendo
@LuisMendo Obrigado, aparentemente sou fanático.
flawr

Respostas:

2

Sábio , 74 bytes

lambda n:kernel(matrix(n+1,[j^-i-(-i==j)for i in[-n..0]for j in[0..n]])).0

O -ie [-n..0]poderia ser ie [0..n], se não fosse o requisito de coeficiente de liderança positivo.

Experimente no Sage Cell

Anders Kaseorg
fonte
2

Mathematica, 55 bytes

NullSpace@Table[x^c-Boole[r==c]/.x->r,{r,0,#},{c,0,#}]&

Saída é o coeficiente da lista, começando no termo constante. Exemplo:

In[1084] := Do[Print[%1077[n] // StandardForm], {n, 0, 7}]

{{1}}

{{0,1}}

{{-1,-1,1}}

{{19,-6,-29,10}}

{{-19,423,287,-325,57}}

{{-227362,-355855,44088,291323,-120862,12813}}

{{145991969,64989065,-123338281,-85635661,79841909,-18146731,1286795}}

{{-5958511844199,3384370785404,8437850634901,489428412300,-4499161007143,1776194531596,-258931801371,13131073916}}

Isso simplesmente encontra o vetor de forma que (A - I)v = 0, semelhante ao código MAPLE no OEIS. O NullSpacemétodo parece sempre escolher o número positivo mínimo para o último elemento, que corresponde à descrição da tarefa.

O x^c-…/.x->rindireto é evitar ter 0^0 == Indeterminate.

kennytm
fonte
0

Pari / GP , 64 bytes

n->a=matkerint(Mat([powers(i,n)|i<-[0..n]]~)-1);a*sign(a[n+1,1])

Retorna os coeficientes como um vetor de coluna.

Experimente online!

alefalpha
fonte