EDIT: For some reason, a few numbers such as 1035 are causing errors (Can't take sqrt of -1, <STDIN> line 1.) Going to have to hunt down the bug and fix it...
EDIT: Just needed a slight change to the first line after BING to prevent tget calls for 0:
use strict;
use warnings;
my ($i, $j, $inum, $jnum, $left);
$| = 1; print "Enter the number to check : ";
my $inp = <STDIN>;
BING:
for ($i = tget($inp-2); $i; $i--) {
$inum = tmake($i);
$left = tget($inp - $inum - 1) + 1;
for ($j = 1; $j < $left; $j++) {
$jnum = tmake($j);
last BING if (tis($inp - $inum - $jnum));
}
}
print " Your triangles are : $inum $jnum "
. ($inp - $inum - $jnum) . "\n";
sub tget { return int(sqrt(1 + $_[0] * 2) - .5); }
sub tmake { return (.5 * $_[0] * ($_[0] + 1)); }
sub tis { my $n = shift; return ($n == tmake(tget($n))); }
Incidently, I ran a looped version of this for all numbers 3-100000, and only the following could not be made with sums of three triangles:
4, 6, 11, 20, 29
As far as I can tell, all integers after 29 can be made with at least one sum of three triangles. The number of sums increases as you go along.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|