window.onload = function(){
var list = [];
var j = 0;
for(var c = 1; c <= 200; c++)
for(var b = 1; b <= c; b++)
for(var a = 1; a <= b; a++)
if(gcd(gcd(a, b), c) == 1 && isHeron(heronArea(a, b, c)))
list[j++] = new Array(a, b, c, a + b + c, heronArea(a, b, c));
sort(list);
document.write("
Primitive Heronian triangles with sides up to 200: " + list.length + "
First ten when ordered by increasing area, then perimeter:
| Sides | Perimeter | Area |
|---|
");
for(var i = 0; i < 10; i++)
document.write("
| " + list[i][0] + " x " + list[i][1] + " x " + list[i][2] + " | " + list[i][3] + " | " + list[i][4] + " |
");
document.write("
Area = 210
| Sides | Perimeter | Area |
|---|
");
for(var i = 0; i < list.length; i++)
if(list[i][4] == 210)
document.write("
| " + list[i][0] + " x " + list[i][1] + " x " + list[i][2] + " | " + list[i][3] + " | " + list[i][4] + " |
");
function heronArea(a, b, c){
var s = (a + b + c)/ 2;
return Math.sqrt(s *(s -a)*(s - b)*(s - c));
}
function isHeron(h){
return h % 1 == 0 && h > 0;
}
function gcd(a, b){
var leftover = 1, dividend = a > b ? a : b, divisor = a > b ? b : a;
while(leftover != 0){
leftover = dividend % divisor;
if(leftover > 0){
dividend = divisor;
divisor = leftover;
}
}
return divisor;
}
function sort(list){
var swapped = true;
var temp = [];
while(swapped){
swapped = false;
for(var i = 1; i < list.length; i++){
if(list[i][4] < list[i - 1][4] || list[i][4] == list[i - 1][4] && list[i][3] < list[i - 1][3]){
temp = list[i];
list[i] = list[i - 1];
list[i - 1] = temp;
swapped = true;
}
}
}
}
}