/*
	(x^2+y^2)^2 = x^4+y^4+2*x^2*y^2
	(x^2-y^2)^2 + (2*x*y)^2 = x^4+y^4 -2*x^2*y^2  + 4*x^2*y^2
	a^2 + b^2 = c^2
note:
aller voir aussi
http://www.uwgb.edu/dutchs/RECMATH/rmpowers.htm#pythtrip
*/
function trianglePythagore(u, v) {
	var x=u, y=v
	if(x<y) {
		var z=x;x=y;y=z;
	}
	var a=2*x*y, b=x*x-y*y, c=x*x+y*y
	var g = gcd(a,b); 
	g = gcd(c, g)
	a /= g; b /=g; c /= g

	return {a: a, b: b, c: c}
}
function gcd(x, y) {
	var u=x, v=y, w
	while(v!=0) {
		w=u%v
		u=v
		v=w
	}
	return u
}

function facteurCarre(x) {
	var u=x, k=1
	for(var d=2; d*d<=u; d++) {
		while (u % (d*d)==0) {
			k *= d
			u /= d*d
		}
	}
	return k
}

			
function cherchePyth() {
	var u = document.frm.uv.value
	u = u.replace(/^\s+/,"")
	u = u.replace(/\s+$/,"")
	u = u.replace(/\s+/," ")
	if(u.length==0)
	u = "3 1";
	t = u.split(/\s+/g)
	if(t.length==0) {
		t[0]=3; t[1]=1
	} else if(t.length==1) {
		t[0] = parseInt(t[0])
		t[1] = 1
	} else {
		t[0] = parseInt(t[0])
		t[1] = parseInt(t[1])
	}
	document.frm.uv.value = t[0]+"  "+t[1]
	var tr = trianglePythagore(t[0], t[1])
	var s0  = "les c&ocirc;t&eacute;s de l'angle droit <code>a = "+tr.a+", b = "+tr.b+"</code>, l'hypot&eacute;nuse <code>c = " +tr.c+"</code>"
	var aire = 2*tr.a * tr.b
	var k = facteurCarre(2*tr.a * tr.b)
	var g0 = gcd(tr.a, 2*k), g1=gcd(tr.b, 2*k),g2=gcd(tr.c, 2*k)
	var s1 = "<code>a = "+(tr.a/g0)+"/"+(2*k/g0)+",  b = "+(tr.b/g1)+"/"+(2*k/g1)+", c = "+(tr.c/g2)+"/"+(2*k/g2)+"</code>"
	document.getElementById("idSols").innerHTML = "Un triangle pythagoricien&nbsp;: "+s0+"<br><br>" +
		"Le triangle rationnel correspondant obtenu est "+s1+" ainsi que le nombre congruent <code>"+(aire/(k*k))+"</code> sans facteur carré.<br><br>"
}

function congruent(x, y) {
        var tr = trianglePythagore(x, y)
	var aire = 2*tr.a * tr.b
	var k = facteurCarre(2*tr.a * tr.b)
	return aire/(k*k)
}

function calc() {
	var v = parseInt(document.frm.x.value)
	document.frm.x.value=v
	var s = listecongruent(v)
	document.getElementById("idListe").innerHTML = s+"...<br>"
}
function listecongruent(v) {
	var s="", t=[]
	for(var x=2; x<=v; x++) {
		for(var y=1; y<x; y++) {
			t.push( congruent(x, y))
		}
	}
	t = t.sort(function(){return (arguments[0]<arguments[1])? -1 : (arguments[0]==arguments[1])? 0 : 1})
	s = t[0]+""
	var a = t[0]
	for(var i=1; i<t.length; i++) {
		if(t[i]!=a) {
			a = t[i]
			s += ", "+a
		}
	}
	return s
}

	
function hasard() {
	var x = 1+Math.floor(1000*Math.random()), y
	do {
		y = 1+Math.floor(1000*Math.random())
	} while(x==y)
	if(x<y) {
		var z=x; x=y; y=z;
	}
	document.frm.uv.value = x+" "+y
	cherchePyth()
}
function efface() {
	document.getElementById("idSols").innerHTML = ""
	document.frm.uv.value = ""
}
	

