ECM- tavola parametri

INPUT
N=numero massimo di cifre decimali del fattore piu' piccolo

OUTPUT
k=numero di cifre decimali di un primo p, da 0 ad N, con salti di 5.
B=smoothness bound "ideale" per individuare un fattore primo dell'ordine di grandezza di p
w=numero di cicli di ECM presumibilmente necessari  ad individuare il fattore p (ossia una curva ellittica  su Z_p con ordine B-smooth)

table(N)=k=0;\
 while(k<N-4,k=k+5;\
      p=nextprime(10^k+98798);\
      B=round(exp(sqrt(log(p)*log(log(p)/2))));\
      w=sqrt(2*log(p)/log(log(p)));\
      print("k= ",k,"  B= ",B," exp. curves=" round(w^w)));\

NB: confrontare questa tabella con quella di Alpertron.
------------------------------------------------------------------------------------------
ECM-fattore massimo dell'ordine  di varie curve ellittiche su uno stesso primo p.

INPUT
k=cifre decimali di un primo p
N=numero di curve E(Z_p) da esaminare

OUTPUT
ordine di ogni curva #E(Z_p)
fattore Massimo dell'ordine #E(Z_p)  

MF(k,N)=j=0;\
p=nextprime(10^k+random(1000));\
while(j<N,j=j+1;\
b=random(p);\
E=ellinit([0,0,0,1,b]*Mod(1,p),1);\
m=p+1- ellap(E,p);\
ff=factor(m);\
ll=length(mattranspose(ff));\
r=ff[ll,1];\
 print("ordine della curva #E=",m,"      ",  "fattore massimo di #E(Z_p) =  ",r)\
      );\

------------------------------------------------------------------------------------------------
INPUT
k=numero di cifre decimali di un primo 
B= smoothness bound
N=numero di curve ellittiche da esaminare.

prende N curve ellittiche a caso su Z_p, con p primo di circa k cifre
calcola l'ordine del gruppo dei punti e lo fattorizza 

OUTPUT
stampa il fattore piu' grosso solo se   <B

MFB(k,B,N)=j=0;\
p=nextprime(10^k+random(1000));\
while(j<N,j=j+1;\
b=random(p);\
E=ellinit([0,0,0,1,b]*Mod(1,p),1);\
m=p+1- ellap(E,p);\
ff=factor(m);\
ll=length(mattranspose(ff));\
r=ff[ll,1];\
if(r<B, print("fattore massimo di #E =  ",r))\
      );\

-----------------------------------------------------
INPUT
k=numero di cifre decimali di un primo 
N=numero di curve ellittiche da esaminare.

OUTPUT
stampa la fattorizzazione completa dell'ordine della curva:
prima i fattori poi i relativi esponenti
 
 FFO(k,N)=j=0;\
 p=nextprime(10^k+random(1000));\
 while(j<N,j=j+1;\
 b=random(p);\
 E=ellinit([0,0,0,1,b]*Mod(1,p),1);\
 m=p+1-ellap(E,p);\
 ff=factor(m);\
 print("b=", b,"     ", "cardinalita' della curva=", m,"      ", mattranspose(ff)));\

 

 

 
 
-----------------------------------------------

INPUT
k=numero di cifre decimali di un primo p
 N=numero di curve ellittiche da esaminare.

OUTPUT
curve su Z_p con ordine #E(Z_p) primo & il coefficiente "B" dell'equaz. di Weierstrass 
Y^2=X^3-X+B  &  un punto P sulla curva 

PO(k,N)=j=0;\
p=nextprime(10^k+random(1000));\
while(j<N,j=j+1;\
x=random(p);y=random(p);\
b=y^2-x^3-x;\
E=ellinit([0,0,0,1,b]*Mod(1,p),1);\
m=p+1- ellap(E,p);\
 if (isprime(m), print("B=", lift(Mod(b,p)),"  ", "ordine della curva=", m,"  ", "P=[",x," , ", y ,"]"))\
);\