Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Write any natural number as sum of three triangular numbers

by JavaFan (Canon)
on Sep 25, 2011 at 12:22 UTC ( [id://927744]=note: print w/replies, xml ) Need Help??


in reply to Write any natural number as sum of three triangular numbers

This solution first finds all the sums of the triangle number pairs. To find solutions, it looks for each triangle number whether there's a pair that sums to the target:
#!/usr/bin/perl use strict; use warnings; my $target = 80; my @triangles; my %sum; # # Find all triangle numbers less than the target # my $n = 0; { my $t = $n * $n++ / 2; last if $t > $target; push @triangles, $t; redo; } # # Find all sums of triangle numbers: # for (my $i = 0; $i < @triangles; $i++) { my $t1 = $triangles[$i]; for (my $j = $i; $j < @triangles; $j++) { my $t2 = $triangles[$j]; last if $t1 + $t2 > $target; $sum{$t1 + $t2} ||= [$t1, $t2]; } } # # Now for each number, try all triangle numbers and see if there's a s +um # NUMBER: for (my $number = 0; $number <= $target; $number++) { foreach my $triangle (@triangles) { next unless $sum{$number - $triangle}; printf "%d = %d + %d + %d\n", $number, $triangle, @{$sum{$number - $triangle}}; next NUMBER; } } __END__ 0 = 0 + 0 + 0 1 = 0 + 0 + 1 2 = 0 + 1 + 1 3 = 0 + 0 + 3 4 = 0 + 1 + 3 5 = 1 + 1 + 3 6 = 0 + 0 + 6 7 = 0 + 1 + 6 8 = 1 + 1 + 6 9 = 0 + 3 + 6 10 = 0 + 0 + 10 11 = 0 + 1 + 10 12 = 0 + 6 + 6 13 = 0 + 3 + 10 14 = 1 + 3 + 10 15 = 0 + 0 + 15 16 = 0 + 1 + 15 17 = 1 + 1 + 15 18 = 0 + 3 + 15 19 = 1 + 3 + 15 20 = 0 + 10 + 10 21 = 0 + 0 + 21 22 = 0 + 1 + 21 23 = 1 + 1 + 21 24 = 0 + 3 + 21 25 = 0 + 10 + 15 26 = 1 + 10 + 15 27 = 0 + 6 + 21 28 = 0 + 0 + 28 29 = 0 + 1 + 28 30 = 0 + 15 + 15 31 = 0 + 3 + 28 32 = 1 + 3 + 28 33 = 3 + 15 + 15 34 = 0 + 6 + 28 35 = 1 + 6 + 28 36 = 0 + 0 + 36 37 = 0 + 1 + 36 38 = 0 + 10 + 28 39 = 0 + 3 + 36 40 = 1 + 3 + 36 41 = 3 + 10 + 28 42 = 0 + 6 + 36 43 = 0 + 15 + 28 44 = 1 + 15 + 28 45 = 0 + 0 + 45 46 = 0 + 1 + 45 47 = 1 + 1 + 45 48 = 0 + 3 + 45 49 = 0 + 21 + 28 50 = 1 + 21 + 28 51 = 0 + 6 + 45 52 = 1 + 6 + 45 53 = 10 + 15 + 28 54 = 3 + 6 + 45 55 = 0 + 0 + 55 56 = 0 + 1 + 55 57 = 0 + 21 + 36 58 = 0 + 3 + 55 59 = 1 + 3 + 55 60 = 0 + 15 + 45 61 = 0 + 6 + 55 62 = 1 + 6 + 55 63 = 3 + 15 + 45 64 = 0 + 28 + 36 65 = 0 + 10 + 55 66 = 0 + 0 + 66 67 = 0 + 1 + 66 68 = 1 + 1 + 66 69 = 0 + 3 + 66 70 = 0 + 15 + 55 71 = 1 + 15 + 55 72 = 0 + 6 + 66 73 = 0 + 28 + 45 74 = 1 + 28 + 45 75 = 3 + 6 + 66 76 = 0 + 10 + 66 77 = 1 + 10 + 66 78 = 0 + 0 + 78 79 = 0 + 1 + 78 80 = 1 + 1 + 78

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://927744]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (4)
As of 2024-04-24 03:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found