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.xcontrollopseudoprimoAggiornamenti fatti 0m1m2
Quante cifre xcifreLa potenza di 10 della base : xcifrxLa base usata : xbaseAltri 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 usarepower_mod(base,esponente,nprimo)
.
- http://www.elegio.it/max/manuale-maxima-internet++.html
- http://maxima.sourceforge.net/docs/manual/en/maxima_29.html#SEC162 Ossia Number Theory
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]]
- http://reference.wolfram.com/mathematica/ref/Mod.html
- http://reference.wolfram.com/mathematica/ref/PowerMod.html Se si eleva a potenza un intero e DOPO, al termine del calcolo, si calcola il modulo il calcolo dura tantissimo ed il computer si blocca... Bisogna invece usare una funzione specifica che fa il calcolo progressivamente, come ho fatto io in Javascript.
- http://reference.wolfram.com/mathematica/ref/PrimitiveRoot.html
- http://reference.wolfram.com/mathematica/ref/MultiplicativeOrder.html