rădăcină primitivă

definiție

O modulo rădăcină primitivă (primitiv modulo rădăcină) numit un număr astfel încât toate puterile sale Modulo rula prin toate numerele prime relativ cu. Matematic, acest lucru este precizat după cum urmează: dacă este o modulo rădăcină primitivă, atunci pentru orice întreg astfel încât există un întreg astfel încât.

În special, în cazul unui grad simplu de rădăcină primitivă trec prin toate numerele de la.

existență

Primitive modulo rădăcină există dacă și numai dacă există un grad de prim ciudat, sau de două ori puterea unui prim, precum și în cazurile ,.

Această teoremă (care a fost complet dovedit de Gauss în 1801), este fără dovezi.

Comunicarea cu funcția Euler

Să - modulo rădăcină primitivă. Apoi, putem arăta că cel mai mic număr pentru care (de exemplu - un indicator (ordine multiplicativ)), la fel. Mai mult decât atât, opusul este adevărat, iar acest fapt va fi utilizat de către noi în următorul algoritm pentru a găsi rădăcinile primitive.

În plus, în cazul în care cel puțin Mod are una rădăcină primitivă, atunci toate acestea (ca o grupare ciclică cu elemente ale unui generator).

Algoritmul pentru a găsi o rădăcină primitivă

Algoritmul naiv va necesita pentru fiecare încercare valorile de timp pentru a calcula toate puterile sale pentru a verifica dacă acestea sunt toate diferite. Este algoritmul prea lent, mai jos ne cu câteva teoreme bine-cunoscute ale teoriei numerelor vom obține un algoritm mai rapid.

Mai sus a fost dat o teorema care să ateste că, în cazul cel mai mic număr pentru care (de exemplu - un indicator), precum și, apoi - rădăcină primitivă. Deoarece pentru orice număr prime între ele, realizat teorema lui Euler (), apoi pentru a verifica dacă rădăcina primitivă, este suficient să se verifice dacă pentru toate numerele de mai puțin satisfăcuți. Cu toate acestea, în timp ce este algoritmul prea lent.

Din teorema lui Lagrange implică faptul că rata de orice număr de modulo împarte. Astfel, este suficient să se verifice că toate divizorilor corespunzătoare se efectuează. Acesta are un algoritm mult mai rapid, dar poate merge chiar mai departe.

Numere Factorize. Vom demonstra că în algoritmul anterior este suficient pentru a considera ca o serie de specii. Într-adevăr, chiar și - orice divizor propriu-zis. Apoi, în mod evident, există astfel încât, de exemplu, . Cu toate acestea, dacă vom obține:

și anume încă printre numerele de forma ar fi ceva pentru care nu sunt îndeplinite condițiile, după cum este necesar.

Astfel, primitiv rădăcină constatare algoritm astfel. Am găsit factorize-l. Acum am itera prin toate numerele, și pentru fiecare vizualizare, toate cantitățile. În cazul în care acest lucru toate aceste numere au fost diferite de la, aceasta este rădăcina primitivă dorită.

Ore de algoritm (presupunând că există un număr de separatoare, iar algoritmul exponentiala este executat exponentiere binar care este.), Plus, în același timp, numărul factorizarea, în cazul în care - rezultatul, și anume, Valoarea rădăcinii primitive necunoscute.

Pro rata de creștere cu creșterea rădăcinilor primitive cunoscute numai estimări. Este cunoscut faptul că rădăcinile primitive - o cantitate relativ mică. Una dintre evaluările bine cunoscute - evaluarea Shupa (Shoup), că, în ipoteza adevărului ipotezei Riemann, există o rădăcină primitivă.

punerea în aplicare

Funcția powmod () realizează o exponentiation modulare binar, și funcția de tip generator (int p) - este o modulo rădăcină primitivă (număr de factorizare este realizat pentru un algoritm simplu).

Pentru a se adapta la această funcție arbitrară, trebuie doar să adăugați calculul funcției lui Euler într-o variabilă, precum și a filtra non-prime la.

articole similare