In rete: http://www.elegio.it/max/algoritmo-euclide-esteso.html

Provo le funzioni di questo documento:

...

...

Per curiosità, scrivendo con Maxima zn_primroot(1000000000039) si ottiene 3 ossia 3 è la più piccola radice primitiva di 1000000000039.

Algoritmo di Euclide esteso, programmato in Javascript

Calcola d, v e w assegnando a e e b.

a = ; b = :

.?.

In pratica è questo ( apparentemente semplice ) algoritmo:

function esteso_mcd(a,b){
    var d=Math.round(a),t=Math.round(b),q,
        x=0,y=1,z=0,v=1,w=0;
    while(t!=0){
        z=d%t; q=(d-z)/t; d=t; t=z;
        z=x; x=v-q*x; v=z;
        z=y; y=w-q*y; w=z;
        }
    return [d,v,w];
    }

Come risultato il primo termine ossia d è il massimo comun divisore ( in maximese ossia nel linguaggio di http://maxima.sourceforge.net/ si ottiene scrivendo  gcd(a,b)  ) mentre gli altri due termini, v e w, sono i fattori che servono per fare la combinazione lineare tra i due argomenti in modo che dia come risultato appunto il massimo comun divisore ossia  a*v+b*w=d .

Supponiamo che b sia un numero primo ( ad esempio qualche primo che serve per creare primi di Mersenne, ossia 57885161 oppure 43112609 oppure 37156667 oppure 32582657 oppure 30402457 oppure 25964951 oppure 24036583 oppure 20996011 oppure 13466917 oppure 6972593 ... usabili per ottenere, per esempio  257885161 −1  enorme primo di Mersenne ). Allora ogni a < p ha, come massimo comun divisore, 1. Se calcoliamo il modulo di questa espressione rispetto a b abbiamo che ovviamente  (b*w)%b  in Javascript o  mod(b*w,b)  in maximese vale zero e dunque (a*v)%b=1 il che vuol dire che v rappresenta l'intero inverso di a quando si lavora modulo b.

Cercare con Maxima primi enormi QUASI potenze di 10

E' un modo per giocare con grandi numeri primi e per mettere a dura prova Maxima...

Con Maxima ho trovano che sono primi:

101 −3 ossia 7, con radice primitiva 3
102 −3 ossia 97, con radice primitiva 5
103 −3 ossia 997, con radice primitiva 7
1017 −3 ossia 99999999999999997, con radice primitiva 2
Da qui in poi Maxima non riesce a trovare una radice primitiva...
10140 −3 ma radice primitiva ignota.
10990 −3 ma radice primitiva ignota.
101887 −3 ma radice primitiva ignota.

Insomma ... forse l'ultimo andrebbe conservato come enorme primo... o no ?

Qualcosa di analogo si può fare sottraendo 9 e non 3 alla potenza di 10.

103 −9 con radice primitiva 6
105 −9 con radice primitiva 6
107 −9 con radice primitiva 22
1033 −9 con radice primitiva 6
1045 −9 con radice primitiva 7
Da qui in poi Maxima non riesce a trovare una radice primitiva...
10105 −9 ma con radice primitiva ignota
10197 −9 ma con radice primitiva ignota
10199 −9 ma con radice primitiva ignota
10281 −9 ma con radice primitiva ignota
10301 −9 ma con radice primitiva ignota
10317 −9 ma con radice primitiva ignota
101107 −9 ma con radice primitiva ignota
101657 −9 ma con radice primitiva ignota

Il file che ho usato per fare questi calcoli, salvato con l'estensione .mac è di puro testo e lo ricopio qua di seguito:

Bibliografia

In questa immagine SVG uso l'elemento defs unito a symbol e ad use e scrivo testi grandi e belli.. {circle r="300" cx="30000" cy="18000" fill="red" /}
Giampaolo Bottoni
gpbottoni@gmail.com
http://www.alumni.polimi.it/it/Wall
( ing. nucleare 1972 )