Pythagorean triples: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: (Pruning out some redundant search space in existing contribution)) |
(Added Kotlin) |
||
Line 2,187: | Line 2,187: | ||
10^09 1294080089 70230484 |
10^09 1294080089 70230484 |
||
10^10 14557915466 702304875 |
10^10 14557915466 702304875 |
||
</pre> |
|||
=={{header|Kotlin}}== |
|||
{{trans|Go}} |
|||
Due to deep recursion, I needed to increase the stack size to 4MB to get up to a maximum perimeter of 10 billion. Expect a run time of around 30 seconds on a typical laptop. |
|||
<lang scala>// version 1.1.1 |
|||
var total = 0L |
|||
var prim = 0L |
|||
var maxPeri = 0L |
|||
fun newTri(s0: Long, s1: Long, s2: Long) { |
|||
val p = s0 + s1 + s2 |
|||
if (p <= maxPeri) { |
|||
prim++ |
|||
total += maxPeri / p |
|||
newTri( s0 - 2 * s1 + 2 * s2, 2 * s0 - s1 + 2 * s2, 2 * s0 - 2 * s1 + 3 * s2) |
|||
newTri( s0 + 2 * s1 + 2 * s2, 2 * s0 + s1 + 2 * s2, 2 * s0 + 2 * s1 + 3 * s2) |
|||
newTri(-s0 + 2 * s1 + 2 * s2, -2 * s0 + s1 + 2 * s2, -2 * s0 + 2 * s1 + 3 * s2) |
|||
} |
|||
} |
|||
fun main(args: Array<String>) { |
|||
maxPeri = 100 |
|||
while (maxPeri <= 10_000_000_000L) { |
|||
prim = 0 |
|||
total = 0 |
|||
newTri(3, 4, 5) |
|||
println("Up to $maxPeri: $total triples, $prim primatives") |
|||
maxPeri *= 10 |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Up to 100: 17 triples, 7 primatives |
|||
Up to 1000: 325 triples, 70 primatives |
|||
Up to 10000: 4858 triples, 703 primatives |
|||
Up to 100000: 64741 triples, 7026 primatives |
|||
Up to 1000000: 808950 triples, 70229 primatives |
|||
Up to 10000000: 9706567 triples, 702309 primatives |
|||
Up to 100000000: 113236940 triples, 7023027 primatives |
|||
Up to 1000000000: 1294080089 triples, 70230484 primatives |
|||
Up to 10000000000: 14557915466 triples, 702304875 primatives |
|||
</pre> |
</pre> |
||