/* Pari
/* Prime conductor for elliptic curves
/* Author: Joachim Wehler
*/
default(format, "f0.10" ); 

print ("====================================================");

/* Choose testcase */

print("Elliptic_curve_02: Start.\n");

ellprint(E) =
{

	output = "Y^2";
	if (E.a1 !=0, output = concat(output, " + "); output = concat(output, E.a1 * YX));
	if (E.a3 !=0, output = concat(output, " + "); output = concat(output, E.a3 * Y));
	output = concat(output, " = X^3");
	if (E.a2 !=0, output = concat(output, " + "); output = concat(output, E.a2 * X^2));
	if (E.a4 !=0, output = concat(output, " + "); output = concat(output, E.a4 * X));
	if (E.a6 !=0, output = concat(output, " + "); output = concat(output, E.a6));
/*	print("output: ", output); */
	return(output);
}

cases =[[0, 0, 0,-3,3], [0, 0, 0,1,0], [0, 0, 0,-1,0], [0, 0, 0,0,3], [0, 0, 0,-1,-14], [0, 0, 0,-595,5586], \
		[0, 0, -9,0,-27], [0, 0, 0, 0, -2^4 * 3^3], [5,0,1,0,0] ];

for (case = 1, matsize(cases)[2] ,\
	{ 
/*		v = [ 0, 0, 0, cases[case][1], cases[case][2]]; */
		v = cases[case];
		print("case: ", case, ", v = ", v);			
		E 		= ellinit (v);
		E_min 	= ellminimalmodel(E);
		E_red 	= ellglobalred(E); 
		N 		= E_red[1];
		print ( "j-value: ", E.j, " = ", factor(E.j) );
		print ( "Original Weierstrass polynomial: ", ellprint(E));
		print ( "Original discriminant: ", E.disc, " = ", factor(E.disc) );
		print ( "Minimal Weierstrass polynomial: ", ellprint(E_min));
		print ( "Minimal discriminant: ", E_min.disc, " = ", factor(E_min.disc) );	
		print ( "Conductor: ", N, " = ", factor(N), "\n");		
	});

print("Elliptic_curve_02: End");				
print("====================================================");


