Sz\303\241m\303\255t\303\263g\303\251pes sz\303\241melm\303\251let J\303\241rai Antal Ezek a programok csak szeml\303\251ltet\303\251sre szolg\303\241lnak
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">1. A pr\303\255mek eloszl\303\241sa, szit\303\241l\303\241s</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">2. Egyszer\305\261 faktoriz\303\241l\303\241si m\303\263dszerek</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">3. Egyszer\305\261 pr\303\255mtesztel\303\251si m\303\263dszerek</Font></Text-field> LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0Yn
<Text-field style="Heading 1" layout="Heading 1">4. Lucas-sorozatok</Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">5. Alkalmaz\303\241sok </Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">6. Sz\303\241mok \303\251s polinomok</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">7. Gyors Fourier-transzform\303\241ci\303\263</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">8. Elliptikus f\303\274ggv\303\251nyek</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">9. Sz\303\241mol\303\241s elliptikus g\303\266rb\303\251ken</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">10. Faktoriz\303\241l\303\241s elliptikus g\303\266rb\303\251kkel</Font></Text-field> restart; # # This routine randomly choose an elliptic "curve" modulo n, # where gcd(n,6)=1. The coordinates x,y are choosen # randomly, the parameter a too, and b is calculated. # The list [x,y,a,b] is given back or a divisor d of n. # ellrand:=proc(n) local x,y,a,b,r,d,f; r:=rand(n); d:=n; while d=n do x:=r(n); y:=r(n); a:=r(n); b:=y^2-x^3-a*x mod n; d:=4*a^3+27*b^2 mod n; gcd(d,n); od; if %<n and %>1 then return % fi; [x,y,a,b]; end; Zio2I0kibkc2IjYpSSJ4R0YlSSJ5R0YlSSJhR0YlSSJiR0YlSSJyR0YlSSJkR0YlSSJmR0YlRiVGJUMnPkYrLUklcmFuZEdGJUYjPkYsRiQ/KEYlIiIiRjRGJS9GLEYkQyg+RictRitGIz5GKEY4PkYpRjg+RiotSSRtb2RHRiU2JCwoKiQpRigiIiNGNEY0KiQpRiciIiRGNCEiIiomRilGNEYnRjRGRkYkPkYsLUY9NiQsJiomIiIlRjQpRilGRUY0RjQqJiIjRkY0KUYqRkJGNEY0RiQtSSRnY2RHRiU2JEYsRiRAJDMySSIlR0YlRiQyRjRGWE9GWDcmRidGKEYpRipGJUYlRiU= # # Addition on an elliptic "curve" modulo n, where gcd(n,6)=1. # P and Q are the points to add and a,b are the parameters. # The return value is the sum of the points or a divisor d of n. # elladd:=proc(P,Q,a,b,n) local l,d; if P[3]=0 then return Q fi; if Q[3]=0 then return P fi; if P=Q then return elldou(P,a,b,n) fi; if P[1]=Q[1] then return [0,1,0] fi; d:=igcdex(P[1]-Q[1],n,'l'); if 1<d and d<n then return d fi; l:=(P[2]-Q[2])*l mod n; l^2-P[1]-Q[1] mod n; [%,l*(P[1]-%)-P[2] mod n,1]; end; Zio2J0kiUEc2IkkiUUdGJUkiYUdGJUkiYkdGJUkibkdGJTYkSSJsR0YlSSJkR0YlRiVGJUMrQCQvJkYkNiMiIiQiIiFPRiZAJC8mRiZGMUYzT0YkQCQvRiRGJk8tSSdlbGxkb3VHRiU2JkYkRidGKEYpQCQvJkYkNiMiIiImRiZGQk83JUYzRkNGMz5GLC1JJ2lnY2RleEdGJTYlLCZGQUZDRkQhIiJGKS5GK0AkMzJGQ0YsMkYsRilPRiw+RistSSRtb2RHRiU2JComLCYmRiQ2IyIiI0ZDJkYmRlpGTEZDRitGQ0YpLUZVNiQsKCokKUYrRmVuRkNGQ0ZBRkxGREZMRik3JUkiJUdGJS1GVTYkLCYqJkYrRkMsJkZBRkNGXW9GTEZDRkNGWUZMRilGQ0YlRiVGJQ== # # Doubling on an elliptic "curve" modulo n, where gcd(n,6)=1. # P is the point to double and a, b are the parameters. # The return value is the double of the point P or # a divisor d of n. # elldou:=proc(P,a,b,n) local l,d; if P[3]=0 then return P fi; if P[2]=0 then return [0,1,0] fi; d:=igcdex(2*P[2],n,'l'); if 1<d and d<n then return d fi; l:=(3*P[1]^2+a)*l mod n; l^2-2*P[1] mod n; [%,l*(P[1]-%)-P[2] mod n,1]; end; Zio2JkkiUEc2IkkiYUdGJUkiYkdGJUkibkdGJTYkSSJsR0YlSSJkR0YlRiVGJUMpQCQvJkYkNiMiIiQiIiFPRiRAJC8mRiQ2IyIiI0YyTzclRjIiIiJGMj5GKy1JJ2lnY2RleEdGJTYlLCQqJkY4RjtGNkY7RjtGKC5GKkAkMzJGO0YrMkYrRihPRis+RiotSSRtb2RHRiU2JComLCYqJkYxRjspJkYkNiNGO0Y4RjtGO0YmRjtGO0YqRjtGKC1GSjYkLCYqJClGKkY4RjtGOyomRjhGO0ZQRjshIiJGKDclSSIlR0YlLUZKNiQsJiomRipGOywmRlBGO0ZaRlhGO0Y7RjZGWEYoRjtGJUYlRiU= # # This program compute k*P, k>=0 or a divisor of n # on an elliptic "curve" modulo n, where gcd(n,6)=1. # It use the left-to-right binary method. # ellmul:=proc(P,k,a,b,n) local L,i,Q; if k=0 then return [0,1,0] fi; if P[3]=0 then return P fi; L:=convert(k,base,2); Q:=P; for i from nops(L)-1 to 1 by -1 do Q:=elldou(Q,a,b,n); if type(Q,integer) then return Q fi; if L[i]=1 then Q:=elladd(P,Q,a,b,n); if type(Q,integer) then return Q fi; fi; od; Q; end; Zio2J0kiUEc2Ikkia0dGJUkiYUdGJUkiYkdGJUkibkdGJTYlSSJMR0YlSSJpR0YlSSJRR0YlRiVGJUMoQCQvRiYiIiFPNyVGMSIiIkYxQCQvJkYkNiMiIiRGMU9GJD5GKy1JKGNvbnZlcnRHJSpwcm90ZWN0ZWRHNiVGJkklYmFzZUdGJSIiIz5GLUYkPyhGLCwmLUklbm9wc0dGPjYjRitGNEY0ISIiRkhGNEkldHJ1ZUdGPkMlPkYtLUknZWxsZG91R0YlNiZGLUYnRihGKUAkLUkldHlwZUdGPjYkRi1JKGludGVnZXJHRj5PRi1AJC8mRis2I0YsRjRDJD5GLS1JJ2VsbGFkZEdGJTYnRiRGLUYnRihGKUZPRi1GJUYlRiU= # # This program compute k*P on an elliptic curve # with parameters a,b mod n, where k=k(s,B) is the product of # all prime-powers p^ep for which p<=s and p^ep<=B. # B is roughly the bound for the prime factor we # try to found. Usually s is some hundred and B is some million. # If a divisor d of n found then d is given back. # We suppose that gcd(n,6)=1. # elltry:=proc(P,s,B,a,b,n) local lB,p,ep,Q; Q:=P; lB:=evalf(ln(B)); for p from 2 to s do if isprime(p) then ep:=floor(lB/evalf(ln(p))); Q:=ellmul(Q,p^ep,a,b,n); if type(Q,integer) then return Q fi; fi; od; Q; end; Zio2KEkiUEc2Ikkic0dGJUkiQkdGJUkiYUdGJUkiYkdGJUkibkdGJTYmSSNsQkdGJUkicEdGJUkjZXBHRiVJIlFHRiVGJUYlQyY+Ri9GJD5GLC1JJmV2YWxmRyUqcHJvdGVjdGVkRzYjLUkjbG5HRiU2I0YnPyhGLSIiIyIiIkYmSSV0cnVlR0Y1QCQtSShpc3ByaW1lR0YlNiNGLUMlPkYuLUkmZmxvb3JHRiU2IyomRixGPC1GNDYjLUY4RkEhIiI+Ri8tSSdlbGxtdWxHRiU2J0YvKUYtRi5GKEYpRipAJC1JJXR5cGVHRjU2JEYvSShpbnRlZ2VyR0Y1T0YvRi9GJUYlRiU= # # This program try to split an integer n with the # elliptic curve method. The parameters are chosen to be # optimal to find prime factors below # P with probability 1-p. Better to remove first # small prime divisors. A factor found is given back. # ellsplit:=proc(n,P,p) local d,B,s,K,i,a,b,Q; if isprime(n) then RETURN([n]) fi; B:=ceil(P+2.*sqrt(P)+1); s:=evalf(exp(sqrt(ln(P)*ln(ln(P))/2))); s:=ceil(max(3,s)); K:=ceil(max(3,-s*ln(p))); for i to K do; d:=ellrand(n); if type(d,integer) then break fi; Q:=[d[1],d[2],1]; a:=d[3]; b:=d[4]; d:=elltry(Q,s,B,a,b,n); if type(d,integer) then break fi; od; if type(d,integer) then d else 1 fi; end; Zio2JUkibkc2IkkiUEdGJUkicEdGJTYqSSJkR0YlSSJCR0YlSSJzR0YlSSJLR0YlSSJpR0YlSSJhR0YlSSJiR0YlSSJRR0YlRiVGJUMpQCQtSShpc3ByaW1lR0YlNiNGJC1JJ1JFVFVSTkclKnByb3RlY3RlZEc2IzcjRiQ+RiotSSVjZWlsR0YlNiMsKEYmIiIiKiYkIiIjIiIhRkAtSSVzcXJ0R0YlNiNGJkZARkBGQEZAPkYrLUkmZXZhbGZHRjg2Iy1JJGV4cEdGJTYjLUZGNiMsJCooI0ZARkNGQC1JI2xuR0YlRkdGQC1GVTYjRlRGQEZAPkYrLUY9NiMtSSRtYXhHRjg2JCIiJEYrPkYsLUY9NiMtRmZuNiRGaG4sJComRitGQC1GVTYjRidGQCEiIj8oRi1GQEZARixJJXRydWVHRjhDKT5GKS1JKGVsbHJhbmRHRiVGNUAkLUkldHlwZUdGODYkRilJKGludGVnZXJHRjhbPkYwNyUmRik2I0ZAJkYpNiNGQ0ZAPkYuJkYpNiNGaG4+Ri8mRik2IyIiJT5GKS1JJ2VsbHRyeUdGJTYoRjBGK0YqRi5GL0YkRmlvQCVGam9GKUZARiVGJUYl ellsplit(1001,20,0.001); IiM4
<Text-field style="Heading 2" layout="Heading 2">10.1. K<Font encoding="UTF-8">\303\266tegelt v\303\251grehajt\303\241</Font>s.</Text-field> # # Batch modular inverse modulo n for all L[i] or a divisor of n. # batchmodinv:=proc(L,n) local i,l,d,LL,LLL; if nops(L)=1 then d:=igcdex(L[1],n,'l'); if 1<d then return d fi; [l]; else LL:=[]; i:=1; while i<=nops(L) do if i=nops(L) then LL:=[op(LL),L[i] mod n] else LL:=[op(LL),L[i]*L[i+1] mod n] fi; i:=i+2; od; LL:=batchmodinv(LL,n); if type(LL,integer) then return LL fi; while i<=nops(L) do if i=nops(L) then LL:=[op(LL),L[i] mod n] else LL:=[op(LL),L[i]*L[i+1] mod n] fi; i:=i+2; od; LLL:=[]; i:=1; while i<=nops(L) do if i=nops(L) then LLL:=[op(LLL),LL[(i-1)/2]] else LLL:=[op(LLL),L[i+1]*LL[(i-1)/2] mod n,L[i]*LL[(i-1)/2] mod n] fi; i:=i+2; od; LLL; fi; end; Zio2JEkiTEc2IkkibkdGJTYnSSJpR0YlSSJsR0YlSSJkR0YlSSNMTEdGJUkkTExMR0YlRiVGJUAlLy1JJW5vcHNHJSpwcm90ZWN0ZWRHNiNGJCIiIkMlPkYqLUknaWdjZGV4R0YlNiUmRiQ2I0YzRiYuRilAJDJGM0YqT0YqNyNGKUMsPkYrNyI+RihGMz8oRiVGM0YzRiUxRihGL0MkQCUvRihGLz5GKzckLUkjb3BHRjE2I0YrLUkkbW9kR0YlNiQmRiQ2I0YoRiY+Ris3JEZLLUZPNiQqJkZRRjMmRiQ2IywmRihGM0YzRjNGM0YmPkYoLCZGKEYzIiIjRjM+RistSSxtb2RpbnZiYXRjaEdGJTYkRitGJkAkLUkldHlwZUdGMTYkRitJKGludGVnZXJHRjFPRitGRD5GLEZCRkM/KEYlRjNGM0YlRkVDJEAlRkg+Riw3JC1GTDYjRiwmRis2IywmKiYjRjNGZ25GM0YoRjNGM0ZecCEiIj5GLDclRmhvLUZPNiQqJkZYRjNGam9GM0YmLUZPNiQqJkZRRjNGam9GM0YmRmVuRixGJUYlRiU=
<Text-field style="Heading 2" layout="Heading 2">10.2. Szorz<Font encoding="UTF-8">\303\241</Font>s eg<Font encoding="UTF-8">\303\251szekkel</Font>.</Text-field> # # Doubling on an elliptic "curve" modulo n, where gcd(n,6)=1. # x is the first coordinate of the point to double and a, b # are the parameters. The return value is either a list, the first # coordinate of the double of the point or a divisor d of n. # ellxdou:=proc(x,a,b,n) local l,d; d:=igcdex(4*(x^3+a*x+b),n,'l'); if 1<d then d else [l*((x^2-a)^2-8*b*x) mod n] fi; end; Zio2JkkieEc2IkkiYUdGJUkiYkdGJUkibkdGJTYkSSJsR0YlSSJkR0YlRiVGJUMkPkYrLUknaWdjZGV4R0YlNiUsKComIiIlIiIiKUYkIiIkRjRGNCooRjNGNEYmRjRGJEY0RjQqJkYzRjRGJ0Y0RjRGKC5GKkAlMkY0RitGKzcjLUkkbW9kR0YlNiQqJkYqRjQsJiokKSwmKiQpRiQiIiNGNEY0RiYhIiJGR0Y0RjQqKCIiKUY0RidGNEYkRjRGSEY0RihGJUYlRiU= # # Calculation of the triple of first coordinates # [x,x_2i,x_2i+1] if t=0 or [x,x_2i+1,x_2i+2] if t=1 # from the triple of first coordinates [x,x_i,x_i+1] # on an elliptic "curve" modulo n, where gcd(n,6)=1, and a, b # are the parameters. The return value is this list # or a divisor d of n. # ellnextx:=proc(L,t,a,b,n) local l,d,x,xi,xip,xii,xiip; x:=L[1]; xi:=L[2]; xip:=L[3]; if t=0 then d:=igcdex(4*(xi^3+a*xi+b),n,'l'); if 1<d then return d fi; xii:=l*((xi^2-a)^2-8*b*xi) mod n; d:=igcdex(x*(xi-xip)^2,n,'l'); if 1<d then return d fi; xiip:=l*((a-xi*xip)^2-4*b*(xi+xip)) mod n; else d:=igcdex(x*(xi-xip)^2,n,'l'); if 1<d then return d fi; xii:=l*((a-xi*xip)^2-4*b*(xi+xip)) mod n; d:=igcdex(4*(xip^3+a*xip+b),n,'l'); if 1<d then return d fi; xiip:=l*((xip^2-a)^2-8*b*xip) mod n; fi; [x,xii,xiip] end; Zio2J0kiTEc2IkkidEdGJUkiYUdGJUkiYkdGJUkibkdGJTYpSSJsR0YlSSJkR0YlSSJ4R0YlSSN4aUdGJUkkeGlwR0YlSSR4aWlHRiVJJXhpaXBHRiVGJUYlQyc+Ri0mRiQ2IyIiIj5GLiZGJDYjIiIjPkYvJkYkNiMiIiRAJS9GJiIiIUMoPkYsLUknaWdjZGV4R0YlNiUsKComIiIlRjYpRi5GPkY2RjYqKEZJRjZGJ0Y2Ri5GNkY2KiZGSUY2RihGNkY2RikuRitAJDJGNkYsT0YsPkYwLUkkbW9kR0YlNiQqJkYrRjYsJiokKSwmKiQpRi5GOkY2RjZGJyEiIkY6RjZGNiooIiIpRjZGKEY2Ri5GNkZmbkY2Rik+RiwtRkU2JSomRi1GNiksJkYuRjZGL0ZmbkY6RjZGKUZNRk4+RjEtRlM2JComRitGNiwmKiQpLCZGJ0Y2KiZGLkY2Ri9GNkZmbkY6RjZGNiooRklGNkYoRjYsJkYuRjZGL0Y2RjZGZm5GNkYpQyhGaW5GTj5GMEZgbz5GLC1GRTYlLCgqJkZJRjYpRi9GPkY2RjYqKEZJRjZGJ0Y2Ri9GNkY2RkxGNkYpRk1GTj5GMS1GUzYkKiZGK0Y2LCYqJCksJiokKUYvRjpGNkY2RidGZm5GOkY2RjYqKEZobkY2RihGNkYvRjZGZm5GNkYpNyVGLUYwRjFGJUYlRiU=
<Text-field style="Heading 2" layout="Heading 2">10.3. Projekt<Font encoding="UTF-8">\303\255</Font>v reprezent<Font encoding="UTF-8">\303\241</Font>ci<Font encoding="UTF-8">\303\263</Font>.</Text-field> # # Doubling on an elliptic "curve" modulo n, where gcd(n,6)=1. # x, z are the coordinates of the point to double and a, b # are the parameters. The return value is a list, the # coordinates of the double of the point. # ellxzdou:=proc(x,z,a,b,n) [(x^2-a*z^2)^2-8*b*x*z^3 mod n,4*z*(x^3+a*x*z^2+b*z^3) mod n] end; Zio2J0kieEc2IkkiekdGJUkiYUdGJUkiYkdGJUkibkdGJUYlRiVGJTckLUkkbW9kR0YlNiQsJiokKSwmKiQpRiQiIiMiIiJGNSomRidGNSlGJkY0RjUhIiJGNEY1RjUqKiIiKUY1RihGNUYkRjUpRiYiIiRGNUY4RiktRiw2JCwkKigiIiVGNUYmRjUsKCokKUYkRjxGNUY1KihGJ0Y1RiRGNUY3RjVGNSomRihGNUY7RjVGNUY1RjVGKUYlRiVGJQ== # # Calculation of the triple of coordinates # [[x,z],[x_2i,z_2i],[x_2i+1,z_2i+1]] if t=0 # or [[x,z],[x_2i+1,z_2i+1],[x_2i+2,z_2i+2]] if t=1 # from the triple of coordinates [[x,z],[x_i,z_i],[x_i+1,z_i+1]] # on an elliptic "curve" modulo n, where igcd(n,6)=1, and a, b # are the parameters. The return value is this list. # ellnextxz:=proc(L,t,a,b,n) local l,d,x,z,xi,zi,xip,zip,xii,zii,xiip,ziip; x:=L[1][1]; z:=L[1][2]; xi:=L[2][1]; zi:=L[2][2]; xip:=L[3][1]; zip:=L[3][2]; if t=0 then xii:=(xi^2-a*zi^2)^2-8*b*xi*zi^3 mod n; zii:=4*zi*(xi^3+a*xi*zi^2+b*zi^3) mod n; xiip:=z*((xi*xip-a*zi*zip)^2-4*b*zi*zip*(xi*zip+xip*zi)) mod n; ziip:=x*(xip*zi-xi*zip)^2 mod n; else xii:=z*((xi*xip-a*zi*zip)^2-4*b*zi*zip*(xi*zip+xip*zi)) mod n; zii:=x*(xip*zi-xi*zip)^2 mod n; xiip:=(xip^2-a*zip^2)^2-8*b*xip*zip^3 mod n; ziip:=4*zip*(xip^3+a*xip*zip^2+b*zip^3) mod n; fi; [[x,z],[xii,zii],[xiip,ziip]] end; Zio2J0kiTEc2IkkidEdGJUkiYUdGJUkiYkdGJUkibkdGJTYuSSJsR0YlSSJkR0YlSSJ4R0YlSSJ6R0YlSSN4aUdGJUkjemlHRiVJJHhpcEdGJUkkemlwR0YlSSR4aWlHRiVJJHppaUdGJUkleGlpcEdGJUklemlpcEdGJUYlRiVDKj5GLSYmRiQ2IyIiIkY7PkYuJkY6NiMiIiM+Ri8mJkYkRj9GOz5GMCZGQ0Y/PkYxJiZGJDYjIiIkRjs+RjImRkhGP0AlL0YmIiIhQyY+RjMtSSRtb2RHRiU2JCwmKiQpLCYqJClGL0ZARjxGPComRidGPClGMEZARjwhIiJGQEY8RjwqKiIiKUY8RihGPEYvRjwpRjBGSkY8RmduRik+RjQtRlM2JCwkKigiIiVGPEYwRjwsKCokKUYvRkpGPEY8KihGJ0Y8Ri9GPEZmbkY8RjwqJkYoRjxGam5GPEY8RjxGPEYpPkY1LUZTNiQqJkYuRjwsJiokKSwmKiZGL0Y8RjFGPEY8KihGJ0Y8RjBGPEYyRjxGZ25GQEY8RjwqLEZgb0Y8RihGPEYwRjxGMkY8LCYqJkYvRjxGMkY8RjwqJkYxRjxGMEY8RjxGPEZnbkY8Rik+RjYtRlM2JComRi1GPCksJkZjcEY8RmJwRmduRkBGPEYpQyY+RjNGZ28+RjRGZXA+RjUtRlM2JCwmKiQpLCYqJClGMUZARjxGPComRidGPClGMkZARjxGZ25GQEY8RjwqKkZpbkY8RihGPEYxRjwpRjJGSkY8RmduRik+RjYtRlM2JCwkKihGYG9GPEYyRjwsKCokKUYxRkpGPEY8KihGJ0Y8RjFGPEZncUY8RjwqJkYoRjxGaXFGPEY8RjxGPEYpNyU3JEYtRi43JEYzRjQ3JEY1RjZGJUYlRiU= # # This program compute k*P, k>=0 or a divisor of n # for a list of elliptic "curve" modulo n, where gcd(n,6)=1. # It use the left-to-right binary method, # projective representation, and backtracking. # batchellmuls:=proc(L,k,n) local LL,LLL,LLLL,a,b,i,j,P,B,d,l; if k=0 then return L fi; LL:=[]; for i to nops(L) do a:=L[i][2]; b:=L[i][3]; P:=ellxzdou(L[i][1],1,a,b,n); P:=[[L[i][1],1],[L[i][1],1],P,L[i][2],L[i][3]]; LL:=[op(LL),P]; od; B:=convert(k,base,2); for j from nops(B)-1 to 1 by -1 do LLL:=LL; LL:=[]; for i to nops(LLL) do P:=LLL[i][1..3]; a:=LLL[i][4]; b:=LLL[i][5]; P:=ellnextxz(P,B[j],a,b,n); LL:=[op(LL),[op(P),a,b]]; od; od; LLL:=[]; for i to nops(LL) do LLL:=[op(LLL),LL[i][2][2]] od; LLL:=batchmodinv(LLL,n); if type(LLL,integer) then if LLL<n then return LLL fi; LL:=[]; for i to nops(L) do a:=L[i][2]; b:=L[i][3]; P:=ellxzdou(L[i][1],1,a,b,n); d:=igcdex(P[2],n,'l'); if 1<d then if d<n then return d else next fi; else P:=[[L[i][1],1],[L[i][1],1],[l*P[1] mod n,1]]; fi; for j from nops(B)-1 to 1 by -1 do P:=ellnextxz(P,B[j],a,b,n); d:=igcdex(P[2][2],n,'l'); if 1<d then if d<n then return d else break fi; else P[2][1]:=l*P[2][1]*l mod n; P[2][2]:=1; fi; d:=igcdex(P[2][2],n,'l'); if 1<d then if d<n then return d else break fi; else P[3][1]:=l*P[3][1] mod n; P[3][2]:=1; fi; od; if d=n then next fi; LL:=[op(LL),[P[2][1],a,b]]; od; LLLL:=LL; else LLLL:=[]; for i to nops(LLL) do P:=LL[i][2][1]*LLL[i] mod n; a:=LL[i][4]; b:=LL[i][5]; LLLL:=[op(LLLL),[P,a,b]]; od; fi; LLLL; end; Zio2JUkiTEc2Ikkia0dGJUkibkdGJTYtSSNMTEdGJUkkTExMR0YlSSVMTExMR0YlSSJhR0YlSSJiR0YlSSJpR0YlSSJqR0YlSSJQR0YlSSJCR0YlSSJkR0YlSSJsR0YlRiVGJUMsQCQvRiYiIiFPRiQ+Rik3Ij8oRi4iIiJGPC1JJW5vcHNHJSpwcm90ZWN0ZWRHNiNGJEkldHJ1ZUdGP0MnPkYsJiZGJDYjRi42IyIiIz5GLSZGRTYjIiIkPkYwLUkpZWxseHpkb3VHRiU2JyZGRTYjRjxGPEYsRi1GJz5GMDcnNyRGUUY8RlVGMEZERko+Rik3JC1JI29wR0Y/NiNGKUYwPkYxLUkoY29udmVydEdGPzYlRiZJJWJhc2VHRiVGSD8oRi8sJi1GPjYjRjFGPEY8ISIiRl5vRjxGQUMlPkYqRilGOT8oRi5GPEY8LUY+NiNGKkZBQyc+RjAmJkYqRkY2IztGPEZMPkYsJkZnbzYjIiIlPkYtJkZnbzYjIiImPkYwLUkqZWxsbmV4dHh6R0YlNidGMCZGMTYjRi9GLEYtRic+Rik3JEZYNyUtRlk2I0YwRixGLT5GKkY6PyhGLkY8RjwtRj5GWkZBPkYqNyQtRllGY28mJiZGKUZGRkdGRz5GKi1JLGJhdGNobW9kaW52R0YlNiRGKkYnQCUtSSV0eXBlR0Y/NiRGKkkoaW50ZWdlckdGP0MmQCQyRipGJ09GKkY5PyhGLkY8RjxGPUZBQypGQ0ZJRk0+RjItSSdpZ2NkZXhHRiU2JSZGMEZHRicuRjNAJTJGPEYyQCUyRjJGJ09GMlw+RjA3JUZVRlU3JC1JJG1vZEdGJTYkKiZGM0Y8JkYwRlJGPEYnRjw/KEYvRltvRl5vRjxGQUMnRmJwPkYyLUZncjYlJkZpckZHRidGanJAJUZcc0AlRl5zRl9zW0MkPiZGaXJGUi1GZXM2JCooRjNGPEZkdEY8RjNGPEYnPkZedEY8Rlt0QCVGXHNGYHRDJD4mJkYwRktGUi1GZXM2JComRjNGPEZcdUY8Ric+JkZddUZHRjxAJC9GMkYnRmBzPkYpNyRGWDclRmR0RixGLT5GK0YpQyQ+RitGOj8oRi5GPEY8RmJvRkFDJj5GMC1GZXM2JComJkZkcUZSRjxGZ29GPEYnPkYsJkZlcUZccD5GLSZGZXFGYHA+Ris3JC1GWTYjRis3JUYwRixGLUYrRiVGJUYl # # This procedure is elliptic curve method with projective # representation for factorization of n. It use K "curves" # parallel and only after all step of a multiplication is # done an igcd operation. If no success, # backtracking is used for each curves separately. Unsuccessful # curves are "killed" from the list of curves. # The prime powers up to P are considered so that they # are not less then the bound B. The result is the list # of triples [x,a,b], where x is the first coordinate of # the multiple and a,b are the parameters of the curve. # batchellsplit:=proc(n,K,P,B) local e,d,p,L,i; L:=[]; for i to K do p:=ellrand(n); if type(p,integer) then return p fi; L:=[op(L),[p[1],p[3],p[4]]]; od; p:=2; e:=1; while 2^e<B do e:=e+1 od; while p<=P do while p^e>p*B and e>1 do e:=e-1 od; L:=batchellmuls(L,p^e,n); if type(L,integer) then return L fi; p:=nextprime(p); od; L; end; Zio2Jkkibkc2IkkiS0dGJUkiUEdGJUkiQkdGJTYnSSJlR0YlSSJkR0YlSSJwR0YlSSJMR0YlSSJpR0YlRiVGJUMpPkYtNyI/KEYuIiIiRjNGJkkldHJ1ZUclKnByb3RlY3RlZEdDJT5GLC1JKGVsbHJhbmRHRiU2I0YkQCQtSSV0eXBlR0Y1NiRGLEkoaW50ZWdlckdGNU9GLD5GLTckLUkjb3BHRjU2I0YtNyUmRiw2I0YzJkYsNiMiIiQmRiw2IyIiJT5GLCIiIz5GKkYzPyhGJUYzRjNGJTIpRlBGKkYoPkYqLCZGKkYzRjNGMz8oRiVGM0YzRiUxRixGJ0MmPyhGJUYzRjNGJTMyKiZGLEYzRihGMylGLEYqMkYzRio+RiosJkYqRjNGMyEiIj5GLS1JLWJhdGNoZWxsbXVsc0dGJTYlRi1GaG5GJEAkLUY9NiRGLUY/T0YtPkYsLUkqbmV4dHByaW1lRzYkRjVJKF9zeXNsaWJHRiU2I0YsRi1GJUYlRiU=
<Text-field style="Heading 2" layout="Heading 2">10.4. M<Font encoding="UTF-8">\303\241</Font>sodik l<Font encoding="UTF-8">\303\251</Font>pcs<Font encoding="UTF-8">\305\221</Font>.</Text-field> This is a calculation of the distribution function F of the size of the largest prime factor of a random number. F2:=x->1+ln(x); Zio2I0kieEc2IkYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLCYiIiJGKi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlRiNGKkYlRiVGJQ== F3:=x->F2(1/2)-int(F2(t/(1-t))/t,t=x..1/2); Zio2I0kieEc2IkYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLCYtSSNGMkdGJTYjIyIiIiIiI0YuLUkkaW50R0YlNiQqJi1GKzYjKiZJInRHRiVGLiwmRi5GLkY3ISIiRjlGLkY3RjkvRjc7RiRGLUY5RiVGJUYl F4:=x->F3(1/3)-int(F3(t/(1-t))/t,t=x..1/3); Zio2I0kieEc2IkYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLCYtSSNGM0dGJTYjIyIiIiIiJEYuLUkkaW50R0YlNiQqJi1GKzYjKiZJInRHRiVGLiwmRi5GLkY3ISIiRjlGLkY3RjkvRjc7RiRGLUY5RiVGJUYl The next line would be the definition between 1/5 and 1/4, but too slow; instead we will use approximation. F5:=x->F4(1/4)-int(F4(t/(1-t))/t,t=x..1/4); Zio2I0kieEc2IkYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLCYtSSNGNEdGJTYjIyIiIiIiJUYuLUkkaW50R0YlNiQqJi1GKzYjKiZJInRHRiVGLiwmRi5GLkY3ISIiRjlGLkY3RjkvRjc7RiRGLUY5RiVGJUYl evalf(F4(0.25)); JCIpYSM0IlwhIzU= Order:=10; series(F4(x),x=1/4); IiM1 KzksJkkieEc2IiIiIiNGJiIiJSEiIiwwRiZGJi1JI2xuRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMiIiRGKSomI0YmIiIjRiYpLUYsNiNGNEY0RiZGKS1JJmRpbG9nR0YtNiMjRjFGNEYpKiZGNkYmRitGJkYmKiYjRiYiIzdGJilJI1BpR0YuRjRGJkYpLUkkaW50R0YtNiQqJiwoRiZGJkY2RiktRkM2JComLCZGJkYmLUYsNiMqJkkidEdGJUYmLCZGJkYmRk5GKUYpRiZGJkZORikvRk47Rk1GM0YpRiZGTkYpL0ZOO0YnI0YmRjFGKSIiISwuRihGJiomRihGJkYrRiZGKSomRjRGJkY1RiZGKSomRihGJkY4RiZGKSooRihGJkY2RiZGK0YmRiYqJkZURiZGQEYmRilGJiwwIyIiKUYxRiYqJiMiI0tGMUYmRjZGJkYpKiZGaG5GJkYrRiZGJiomRihGJkY1RiZGJiomRmhuRiZGOEYmRiYqKEZobkYmRjZGJkYrRiZGKSomI0Y0RjFGJkZARiZGJkY0LDAjIiQ/JCIjRkYmKiYjIiVDNUZlb0YmRjZGJkYmKiYjIiNrRjFGJkYrRiZGKSomRmpuRiZGNUYmRikqJkZqb0YmRjhGJkYpKihGam9GJkY2RiZGK0YmRiYqJiMiIzsiIipGJkZARiZGKUYxLDAjIiVnVCIjIilGKSomIyImMzUiRmZwRiZGNkYmRikqJkZbcEYmRitGJkYmKiZGW29GJkY1RiZGJiomRltwRiZGOEYmRiYqKEZbcEYmRjZGJkYrRiZGKSomI0ZhcEYxRiZGQEYmRiZGKCwwKiYjIiZPYiciJE4iRiZGNkYmRiYjIiVvckZlb0YmKiYjRmhvIiImRiZGK0YmRikqJiMiJDcmRmlxRiZGNUYmRikqJkZocUYmRjhGJkYpKihGaHFGJkY2RiZGK0YmRiYqJiMiJGMjIiM6RiZGQEYmRilGaXEsMCMiJ28yISkiJEgoRikqJiMiKF96UiciJVhPRiZGNkYmRikqJiMiJVs/RjFGJkYrRiZGJiomI0Zob0YxRiZGNUYmRiYqJkZcc0YmRjhGJkYmKihGXHNGJkY2RiZGK0YmRikqJiNGXHJGYnBGJkZARiZGJiIiJywwIyIqR0AqXE4iJlhsKEYmKiYjIipDOVohXEZoc0YmRjZGJkYmKiYjIiYlUTsiIihGJkYrRiZGKSomIyIlIz4pRl90RiZGNUYmRikqJkZddEYmRjhGJkYpKihGXXRGJkY2RiZGK0YmRiYqJiMiJSc0JSIjQEYmRkBGJkYpRl90LDAjIitXIilmQTlGaHNGKSomIyIray9GMT1GaHNGJkY2RiZGKSomRmJ0RiZGK0YmRiYqJkZndEYmRjVGJkYmKiZGYnRGJkY4RiZGJiooRmJ0RiZGNkYmRitGJkYpKiZGXHNGJkZARiZGJkZobiwwIyItcyk+cjdiIiIoOm4xI0YmKiYjIi1XdFxEND1GZ3VGJkY2RiZGJiomIyInV0BFRmJwRiZGK0YmRikqJiMiJ3M1OEZicEYmRjVGJkYpKiZGXHZGJkY4RiZGKSooRlx2RiZGNkYmRitGJkYmKiYjRmNxRmVvRiZGQEYmRilGYnAtSSJPR0YuNiNGJiIjNQ== F4s:=evalf(%); KzksJkkieEc2IiIiIiQiKysrKytEISM1ISIiJCIqT0Q0IlwhIzYiIiEkIipgTlYlPiEiKkYmJCIrTidIVSlHRjEiIiMkIis0WVAleSIhIikiIiQkISs6PiZvWSlGNyIiJSQiKz4xRXJTISIoIiImJCErU0hpbDshIiciIickIistcUpfb0ZCIiIoJCErcGd5OUYhIiYiIikkIithTEchMyIhIiUiIiotSSJPRyUqcHJvdGVjdGVkRzYjRiYiIzU= F4p:=convert(F4s,polynom); F4as:=subs(x=t/(1-t),F4p)/t; LDYkIisqR1kocFYhIzYhIiIqJiQiKmBOViU+ISIqIiIiSSJ4RzYiRitGKyomJCIrTidIVSlHRipGKyksJkYsRiskIisrKysrRCEjNUYmIiIjRitGKyomJCIrNFlQJXkiISIpRispRjIiIiRGK0YrKiYkIis6PiZvWSlGOkYrKUYyIiIlRitGJiomJCIrPjFFclMhIihGKylGMiIiJkYrRisqJiQiK1NIaWw7ISInRispRjIiIidGK0YmKiYkIistcUpfb0ZLRispRjIiIihGK0YrKiYkIitwZ3k5RiEiJkYrKUYyIiIpRitGJiomJCIrYUxHITMiISIlRispRjIiIipGK0Yr KiYsNiQiKypHWShwViEjNiEiIiooJCIqYE5WJT4hIioiIiJJInRHNiJGLCwmRixGLEYtRidGJ0YsKiYkIitOJ0hVKUdGK0YsKSwmKiZGLUYsRi9GJ0YsJCIrKysrK0QhIzVGJyIiI0YsRiwqJiQiKzRZUCV5IiEiKUYsKUY0IiIkRixGLComJCIrOj4mb1kpRj1GLClGNCIiJUYsRicqJiQiKz4xRXJTISIoRiwpRjQiIiZGLEYsKiYkIitTSGlsOyEiJ0YsKUY0IiInRixGJyomJCIrLXFKX29GTkYsKUY0IiIoRixGLComJCIrcGd5OUYhIiZGLClGNCIiKUYsRicqJiQiK2FMRyEzIiEiJUYsKUY0IiIqRixGLEYsRi1GJw== F5a:=y->F4(1/4)-int(F4as,t=y..1/4); Zio2I0kieUc2IkYlNiRJKW9wZXJhdG9yR0YlSSZhcnJvd0dGJUYlLCYtSSNGNEdGJTYjIyIiIiIiJUYuLUkkaW50RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiRJJUY0YXNHRiUvSSJ0R0YlO0YkRi0hIiJGJUYlRiU= evalf(F5a(0.20)); JCIpRUtZTiEjNg== F:=proc(x) if x>1. then 1. elif x>=1/2. then F2(x) elif x>=1/3. then F3(x) elif x>=1/4. then F4(x) elif x>=1/5. then F5a(x) else 0. fi; end; Zio2I0kieEc2IkYlRiVGJUAtMiQiIiIiIiFGJEYoMSomRilGKSQiIiNGKiEiIkYkLUkjRjJHRiVGIzEqJkYpRikkIiIkRipGL0YkLUkjRjNHRiVGIzEqJkYpRikkIiIlRipGL0YkLUkjRjRHRiVGIzEqJkYpRikkIiImRipGL0YkLUkkRjVhR0YlRiMkRipGKkYlRiVGJQ== F(0.22); LDAkIitBQC9qKiohIzUiIiItSSNsbkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjIiIkISIiKiYjRiYiIiNGJiktRig2I0YyRjJGJkYvLUkmZGlsb2dHRik2IyNGLkYyRi8qJkY0RiZGJ0YmRiYqJiNGJiIjN0YmKUkjUGlHRipGMkYmRi8tSSRpbnRHRik2JComLChGJkYmRjRGLy1GQTYkKiYsJkYmRiYtRig2IyomSSJ0R0YsRiYsJkYmRiZGTEYvRi9GJkYmRkxGLy9GTDtGS0YxRi9GJkZMRi8vRkw7I0YmIiIlI0YmRi5GLw== evalf(%); JCIqY1BeQCIhIzY= Now the definition of F is finished. We start to count probability ENI and ENII to does not succed with working N elliptic curves, and using step I or step II also. We have to give the following bounds: B0 is the bound for prime powers; B1 is the bound for primes in step I; B2 is the bound for primes in step II; finally, B is the bound for factors; the conditions B0>=B1 and B2>>B1 are supposed. The probabilities to does not succeed with one elliptic curve is also given, these are EI and EII, respectively. Two additional probabilities also given: E0 is an upper bound for probability that error is caused by too small B0, and E1 is an upper bound the probability that error is cause by too small B0 with respect to B1. These shoud have to keep below 1-EI or 1-EII, depending on whether we plane to use step I only or step II, too. Upper bounds for work also given back: these are calculated for one curve as the number of additions on the curve, and are the following: W0 for part of step I depending only on B0; W1 for part of step I depending mainly on B1; W2 for step II and depending mainly on B2. with(numtheory); N1FJJkdJZ2NkRzYiSSliaWdvbWVnYUdGJEkmY2ZyYWNHRiRJKWNmcmFjcG9sR0YkSStjeWNsb3RvbWljR0YkSSlkaXZpc29yc0dGJEkpZmFjdG9yRVFHRiRJKmZhY3RvcnNldEdGJEknZmVybWF0R0YkSSlpbWFndW5pdEdGJEkmaW5kZXhHRiRJL2ludGVncmFsX2Jhc2lzR0YkSSlpbnZjZnJhY0dGJEknaW52cGhpR0YkSSppc3NxcmZyZWVHRiRJJ2phY29iaUdGJEkqa3JvbmVja2VyR0YkSSdsYW1iZGFHRiRJKWxlZ2VuZHJlR0YkSSltY29tYmluZUdGJEkpbWVyc2VubmVHRiRJKG1pZ2NkZXhHRiRJKm1pbmtvd3NraUdGJEkobWlwb2x5c0dGJEklbWxvZ0dGJEknbW9iaXVzR0YkSSZtcm9vdEdGJEkmbXNxcnRHRiRJKW5lYXJlc3RwR0YkSSpudGhjb252ZXJHRiRJKW50aGRlbm9tR0YkSSludGhudW1lckdGJEknbnRocG93R0YkSSZvcmRlckclKnByb3RlY3RlZEdJKXBkZXhwYW5kR0YkSSRwaGlHRiRJI3BpR0YkSSpwcHJpbXJvb3RHRiRJKXByaW1yb290R0YkSShxdWFkcmVzR0YkSStyb290c3VuaXR5R0YkSSpzYWZlcHJpbWVHRiRJJnNpZ21hR0YkSSpzcTJmYWN0b3JHRiRJKHN1bTJzcXJHRiRJJHRhdUdGJEkldGh1ZUdGJA== B0:=10.^5; B1:=10.^4; B2:=10.^6; B:=10.^20; N:=32; JCInKys1IiIh JCImKysiIiIh JCIoKysrIiIiIQ== JCIrKysrKzUiIzY= IiNL E0:=proc() evalf(pi(floor(sqrt(B0)))/B0); end; E0(); Zio2IkYjRiNGIy1JJmV2YWxmRyUqcHJvdGVjdGVkRzYjKiYtX0kqbnVtdGhlb3J5RzYkRiZJKF9zeXNsaWJHRiNJI3BpR0YjNiMtSSZmbG9vckdGLDYjLUklc3FydEdGLDYjSSNCMEdGIyIiIkY2ISIiRiNGI0Yj JCIrKysrK2whIzg= W0:=proc() 2*floor(log[2.](B0))*pi(floor(sqrt(B0)))*N; end; W0(); Zio2IkYjRiNGIywkKioiIiMiIiItSSZmbG9vckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGIzYjLSZJJGxvZ0dGKjYjJEYmIiIhNiNJI0IwR0YjRictX0kqbnVtdGhlb3J5R0YqSSNwaUdGIzYjLUYpNiMtSSVzcXJ0R0YqRjRGJ0kiTkdGI0YnRidGI0YjRiM= IiZnbCc= E1:=proc() local s,p; p:=nextprime(floor(sqrt(B0))); s:=0.; while p<B1 do s:=s+1/p^2; p:=nextprime(p); od; s; end; Zio2IjYkSSJzR0YjSSJwR0YjRiNGI0MmPkYmLUkqbmV4dHByaW1lRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YjNiMtSSZmbG9vckdGKzYjLUklc3FydEdGKzYjSSNCMEdGIz5GJSQiIiFGOD8oRiMiIiJGOkYjMkYmSSNCMUdGI0MkPkYlLCZGJUY6KiQpRiYiIiMhIiJGOj5GJi1GKjYjRiZGJUYjRiNGIw== E1(); JCIrR04+KlwlISM4 W1:=proc() local s,p; p:=nextprime(floor(sqrt(B0))); s:=0; while p<B1 do s:=s+floor(log[2.](p)); p:=nextprime(p); od; 2*N*s; end; Zio2IjYkSSJzR0YjSSJwR0YjRiNGI0MmPkYmLUkqbmV4dHByaW1lRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YjNiMtSSZmbG9vckdGKzYjLUklc3FydEdGKzYjSSNCMEdGIz5GJSIiIT8oRiMiIiJGOUYjMkYmSSNCMUdGI0MkPkYlLCZGJUY5LUYwNiMtJkkkbG9nR0YrNiMkIiIjRjc2I0YmRjk+RiYtRipGRywkKihGRkY5SSJOR0YjRjlGJUY5RjlGI0YjRiM= W1(); IidvLiYp EI:=proc() evalf(1.-F(log[B](B1))); end; EI(); 1-EI(); ENI:=proc() EI()^N; end; ENI(); Zio2IkYjRiNGIy1JJmV2YWxmRyUqcHJvdGVjdGVkRzYjLCYkIiIiIiIhRiotSSJGR0YjNiMtJkkkbG9nRzYkRiZJKF9zeXNsaWJHRiM2I0kiQkdGIzYjSSNCMUdGIyEiIkYjRiNGIw== JCIrd09YJyoqKiEjNQ== JCIoQ2phJCEjNQ== Zio2IkYjRiNGIyktSSNFSUdGI0YjSSJOR0YjRiNGI0Yj JCIrOyNScikpKiEjNQ== EII:=proc() evalf(1.-exp(gamma)*log[B](B1)*F(log[B](B2))); end; EII(); 1-EII(); ENII:=proc() EII()^N; end; ENII(); Zio2IkYjRiNGIy1JJmV2YWxmRyUqcHJvdGVjdGVkRzYjLCYkIiIiIiIhRioqKC1JJGV4cEc2JEYmSShfc3lzbGliR0YjNiNJJmdhbW1hR0YmRiotJkkkbG9nR0YvNiNJIkJHRiM2I0kjQjFHRiNGKi1JIkZHRiM2Iy1GNDYjSSNCMkdGI0YqISIiRiNGI0Yj JCIrJHlhZCIqKiEjNQ== JCIpPF9DJSkhIzU= Zio2IkYjRiNGIyktSSRFSUlHRiNGI0kiTkdGI0YjRiNGIw== JCIrIW9cI0d3ISM1 W2:=proc() ceil(pi(floor(B2))-pi(floor(B1)))*N; end; W2(); Zio2IkYjRiNGIyomLUklY2VpbEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGIzYjLCYtX0kqbnVtdGhlb3J5R0YnSSNwaUdGIzYjLUkmZmxvb3JHRic2I0kjQjJHRiMiIiItRi02Iy1GMjYjSSNCMUdGIyEiIkY1SSJOR0YjRjVGI0YjRiM= IigzRVoj N:=64; B0:=10.^6; B1:=10.^5; B2:=10.^7; B:=10.^25; E0(); E1(); EI(); 1-EI(); ENI(); EII(); 1-EII(); ENII(); W0(); W1(); W2(); IiNr JCIoKysrIiIiIQ== JCInKys1IiIh JCIpKysrNSIiIQ== JCIrKysrKzUiIzs= JCIrKysrIW8iISM4 JCIrPGEoPUUiISM4 JCIrd09YJyoqKiEjNQ== JCIoQ2phJCEjNQ== JCIrKD1fYngqISM1 JCIrXCd5NCYqKiEjNQ== JCIpXjgtXCEjNQ== JCIrSSF6OUkoISM1 Iid3JjMl IilDYWw8 IilvIj4+JQ== # # This procedure is the second step of elliptic curve method for # factorization. The list of "curves" is L, the table of doubles # has size N and primes greater then m but not greater then M # are considered. The result is the last list or a factor of n. # batchellsplit2:=proc(L,n::posint,N::posint,m::posint,M::posint) local y,i,j,E,P,PP,p,pp,d,LL,LLL,a,b; LL:=[]; for i to nops(L) do p:=L[i]; y:=msqrt(L[i][1],n); if y=FAIL then next fi; LL:=[op(LL),[L[i][1],y,1,L[i][2],L[i][3]]]; od; E:=Array(1..nops(LL),1..N); for i to nops(LL) do P:=LL[i][1..3]; a:=LL[i][4]; b:=LL[i][5]; PP:=elldou(P,a,b,n); if type(PP,integer) then return PP fi; E[i,1]:=PP; for j from 2 to N do PP:=elladd(E[i,j-1],PP,a,b,n); if type(PP,integer) then return PP fi; E[i,1]:=PP; od; od; p:=nextprime(m); for i to nops(LL) do P:=LL[i][1..3]; a:=LL[i][4]; b:=LL[i][5]; PP:=ellmul(P,p,a,b,n); if type(PP,integer) then return PP fi; LLL[i]:=[op(PP),a,b]; od; pp:=nextprime(p); while pp<M do d:=pp-p; p:=pp; if d<=2*N then for i to nops(LL) do PP:=LLL[i][1..3]; a:=LL[i][4]; b:=LL[i][5]; PP:=elladd(PP,E[i,d/2],a,b,n); if type(PP,integer) then return PP fi; LLL[i]:=[op(PP),a,b]; od; else for i to nops(LL) do P:=LL[i][1..3]; a:=LL[i][4]; b:=LL[i][5]; PP:=ellmul(P,d,a,b,n); if type(PP,integer) then return PP fi; PP:=elladd(PP,LLL[i][1..3],a,b,n); if type(PP,integer) then return PP fi; LLL[i]:=[op(PP),a,b]; od; fi; pp:=nextprime(p); od; LLL; end; Zio2J0kiTEc2IidJIm5HRiVJJ3Bvc2ludEclKnByb3RlY3RlZEcnSSJOR0YlRignSSJtR0YlRignSSJNR0YlRig2L0kieUdGJUkiaUdGJUkiakdGJUkiRUdGJUkiUEdGJUkjUFBHRiVJInBHRiVJI3BwR0YlSSJkR0YlSSNMTEdGJUkkTExMR0YlSSJhR0YlSSJiR0YlRiVGJUMrPkY6NyI/KEYyIiIiRkItSSVub3BzR0YpNiNGJEkldHJ1ZUdGKUMmPkY3JkYkNiNGMj5GMS1JJm1zcXJ0R0YlNiQmRkk2I0ZCRidAJC9GMUklRkFJTEdGKVw+Rjo3JC1JI29wR0YpNiNGOjcnRk9GMUZCJkZJNiMiIiMmRkk2IyIiJD5GNC1JJkFycmF5R0YpNiQ7RkItRkRGWTtGQkYrPyhGMkZCRkJGYG9GRkMpPkY1JiZGOkZKNiM7RkJGam4+RjwmRmZvNiMiIiU+Rj0mRmZvNiMiIiY+RjYtSSdlbGxkb3VHRiU2JkY1RjxGPUYnQCQtSSV0eXBlR0YpNiRGNkkoaW50ZWdlckdGKU9GNj4mRjQ2JEYyRkJGNj8oRjNGZ25GQkYrRkZDJT5GNi1JJ2VsbGFkZEdGJTYnJkY0NiRGMiwmRjNGQkZCISIiRjZGPEY9RidGZXBGW3E+RjctSSpuZXh0cHJpbWVHNiRGKUkoX3N5c2xpYkdGJTYjRi0/KEYyRkJGQkZgb0ZGQyhGZG9GaW9GXXA+RjYtSSdlbGxtdWxHRiU2J0Y1RjdGPEY9RidGZXA+JkY7Rko3JS1GWDYjRjZGPEY9PkY4LUZqcTYjRjc/KEYlRkJGQkYlMkY4Ri9DJj5GOSwmRjhGQkY3RmdxPkY3RjhAJTFGOSwkKiZGZ25GQkYrRkJGQj8oRjJGQkZCRmBvRkZDKD5GNiZGZXJGZ29GaW9GXXA+RjYtRmJxNidGNiZGNDYkRjIsJComI0ZCRmduRkJGOUZCRkJGPEY9RidGZXBGZHI/KEYyRkJGQkZgb0ZGQypGZG9GaW9GXXA+RjYtRmJyNidGNUY5RjxGPUYnRmVwPkY2LUZicTYnRjZGaXNGPEY9RidGZXBGZHJGaXJGO0YlRiVGJQ==
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">11. Pr\303\255mteszt elliptikus g\303\266rb\303\251kkel</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">12. Polinomfaktoriz\303\241l\303\241s</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1">13. Az AKS-teszt</Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">14. A szita m\303\263dszerek alapjai</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1"><Font encoding="UTF-8">15. Sz\303\241mtest szita</Font></Text-field>
<Text-field style="Heading 1" layout="Heading 1">16. Vegyes probl<Font encoding="UTF-8">\303\251</Font>m<Font encoding="UTF-8">\303\241</Font>k</Text-field>
LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2JVEhRicvJSdpdGFsaWNHUSV0cnVlRicvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0Yn