Stampa un elemento primitivo per ciascuna dimensione del campo


16

Un elemento primitivo di un campo finito è un generatore del gruppo moltiplicativo del campo. In altre parole, alphain F(q)è chiamato elemento primitivo se è una q−1radice primitiva dell'unità in F(q). Ciò significa che tutti gli elementi diversi da zero F(q)possono essere scritti come alpha^iper alcuni numeri interi (positivi) i.

Tutti gli elementi del campo F_{2^k}possono essere scritti al massimo come polinomi di grado k-1con coefficienti che sono o 1o 0. Per renderlo completo, il codice deve anche generare un polinomio irriducibile di grado kche definisce il campo che si sta utilizzando.

L'attività è scrivere codice che genera un elemento primitivo F_{2^k}di tua scelta per ciascuno k = 1 .. 32in ordine.

Il tuo output deve semplicemente elencare i kcoefficienti dell'elemento primitivo in qualsiasi formato che ti piace e quindi su una riga separata gli k+1elementi del polinomio irriducibile. Si prega di separare le uscite per ogni valore di kse possibile.

Il codice potrebbe richiedere tutto il tempo che desideri, ma devi averlo eseguito fino al completamento prima di inviare la risposta.

Non è possibile utilizzare alcuna funzione incorporata o libreria che restituisce elementi primitivi di un campo finito o verifica se un elemento è primitivo.

Un esempio

Perché k = 1l'unico elemento primitivo è 1.

Per k = 2noi abbiamo F_4. I 4 elementi sono {0, 1, x, x + 1}quindi ci sono due elementi primitivi xe x + 1. Quindi il codice potrebbe essere emesso

1 1
1 1 1

come i coefficienti per esempio dove la seconda riga è il polinomio irriducibile che in questo caso è x^2+x+1che ha coefficienti 1 1 1.


4
Hai qualche esempio?
Okx,

1
Possiamo anche generare i polinomi e / o gli elementi di campo codificati come bit di un numero intero che produciamo?
orlp

@orlp Sì assolutamente.

1
Penso che Pari / GP sia l'unico linguaggio che ha un incorporato per questo .
alephalpha,

Risposte:



4

Mathematica, 127 byte

Do[For[i=2*2^n,PolynomialMod[x^Divisors[2^n-1]+1,i~IntegerDigits~2~FromDigits~x,Modulus->2]~Count~0!=1,i--];Print@{2,i},{n,32}]

Spiegazione:

Xn2n-1X2n-1-1Xio-1io2n-1

Produzione:

8589934581111111111111111111111111111110101

x32+x31+X30+X29+X28+X27+X26+X25+X24+X23+X22+X21+X20+X19+X18+X17+X16+X15+X14+X13+X12+X11+X10+x9+X8+X7+X6+X5+X4+X2+1

{2,3}

{2,7}

{2,13}

{2,25}

{2,61}

{2.115}

{2.253}

{2.501}

{2,1019}

{2,2041}

{2,4073}

{2,8137}

{} 2,16381

{} 2,32743

{} 2,65533

{} 2,131053

{} 2,262127

{} 2,524263

{2,1048531}

{2,2097145}

{2,4194227}

{2,8388589}

{2,16777213}

{2,33554351}

{2,67108849}

{} 2,134217697

{} 2,268435427

{} 2,536870805

{} 2,1073741801

{} 2,2147483533

{} 2,4294967287

{} 2,8589934581

Questo è carino. Non vedo l'ora della versione di Jelly :)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.