/* Master Pro ISFA filiere CCS, 2007-2008 TP2 pour le cours de Reseaux Euclidiens et Applications Damien Stehle */ { Gauss(B) = local(n); local(C); local(v); n = matsize(B)[1]; C = matrix(n, 2); v = vector(n); C = B; test = 1; while (test == 1, if (norml2(C[,1]) > norml2(C[,2]), v = C[,2]; C[,2] = C[,1]; C[,1] = v; ); x = round ( mattranspose(C[,1])*C[,2]/ norml2(C[,1])); C[,2] = C[,2] - x*C[,1]; if (x==0, test=0); ); C } { Proprification(B) = local(G); local(mu); local(d); local(C); local(x); local(j); C = B; G = GSO(C); mu = G[1]; d = matsize(C)[2]; for (i=2, d, for (k=1, i-1, j = i-k; if (abs(mu[i,j]) > 1/2, x = round(mu[i,j]); C[,i] = C[,i] - x*C[,j]; for (l=1, j-1, mu[i,l] = mu[i,l]-x*mu[j,l]); mu[i,j] = mu[i,j] - x; for (l=i+1, d, mu[l,i] = mu[l,i]-x*mu[l,j]/mu[j,j]*mu[i,i]); ) ) ); return(C); }