Vecchia versione : http://www.elegio.it/doc/tn/altaprecisione_modulare.html
http://www.elegio.it/doc/tn/lib-algebra-modulare.js.txt
In rete: http://www.elegio.it/doc/tn/esperimenti-lib-algebra-modulare.html

Esperimenti della micro_libreria mia di algebra modulare

Controllo in modo statistico se mm è un vero primo o uno pseudoprimo. Se almeno una volta ottengo false mm non è un numero primo.
xcontrollopseudoprimo
Aggiornamenti fatti 0

numero dei tentativi da fare =
testimone intero di partenza =

Effettua qualche calcolo per usare la libreria...

aa= bb= mm= ( provare con 2*1026−1 oppure 3*1027−1 oppure 6*1034−1 oppure 3*1028+1 )

m1
m2

Quante cifre xcifre
La potenza di 10 della base : xcifrx
La base usata : xbase

Altri primi definibili in modo semplice: 3*1036+1 oppure 3*1067+1 oppure 4*1013+1 oppure 4*10229+1 oppure 6*1020+1 oppure 6*1026+1 oppure 6*1038+1 oppure 6*1045+1 oppure 6*1065+1 oppure 7*109+1 oppure 7*1045+1 oppure 9*109+1 oppure 9*1022+1 oppure 9*1027+1 oppure 9*1036+1 oppure 9*1057+1 oppure 9*1062+1

La caccia al primo esprimibile in modo semplice l'ho fatta con queste istruzioni in maximese:

for j:1 step 1 thru 2000 do(
primo:10^j+1,
if primep(primo) then (
proot:zn_primroot(primo),
disp(concat(j,"] Primo con radice primitiva ",proot),primo)
));

Un mistero: risultano primi 11 e 101 ma nessuno poi nella forma 10 j+1 almeno fino a j=13000 usando Mathematica

Con Maxima 5.30.0

Per fare l'elevamento a potenza in algebra modulare non elevare la base e poi calcolare il modulo perché elevare a potenza produce un intero enorme, mentre se si lavora tenendo presente che si vuol calcolare solo il modulo dell'espressione si lavora con interi non molto più grossi del modulo primo che si usa. In altre parole usare power_mod(base,esponente,nprimo).

Con Mathematica 9

Mi sembra che Mathematica vada più veloce di Maxima ma ... costa... Ecco come fare una funzione che fa la ricerca :

listaprimi[fa_, quanti_, base_] := Block[{nn, pp, i},
  nn = 0;
  For[i = fa, fa + quanti > i, i++;
   pp = base*10^i + 1; 
   If[ PrimeQ[pp], Print["Base ", base, " Esponente ", i ]], nn++]; 
  Return[nn]]