Pythagorean triples: Difference between revisions

Updated D code
(Add Seed7 example)
(Updated D code)
Line 170:
{{trans|C}}
With the dmd compiler use -L/STACK:10000000 to increase stack size.
<lang d>import std.stdio, std.typetuple;
 
// Should be ulong if going to or over 1 billion.
Line 178:
void triples(in xint lim,
in xint a=3, in xint b=4, in xint c=5) nothrow {
enumimmutable xint[9][3] Up = [[a 1,+ -2,b 2,+ 2, -1, 2, 2, -2, 3],c;
[ 1, 2, 2, 2, 1, 2, 2, 2, 3],
[-1, 2, 2, -2, 1, 2, -2, 2, 3]];
const xint p = a + b + c;
if (p > lim)
return;
primitives++;
ntriples += lim / p;
triples(lim, a - 2*b + 2*c, 2*a - b + 2*c, 2*a - 2*b + 3*c);
 
triples(lim, a + 2*b + 2*c, 2*a + b + 2*c, 2*a + 2*b + 3*c);
foreach (i; TypeTuple!(0, 1, 2))
triples(lim, -a + 2*b + 2*c, -2*a + b + 2*c, -2*a + 2*b + 3*c);
triples(lim,
U[i][0] * a + U[i][1] * b + U[i][2] * c,
U[i][3] * a + U[i][4] * b + U[i][5] * c,
U[i][6] * a + U[i][7] * b + U[i][8] * c);
}
 
Anonymous user