use strict; #use bigint; my @p = (); my %r = (); my $i; for ($i = 1; $i <= 10000; $i++) { push @p, $i * $i; } my $count = 0; my $sum = 0; for ($i = 2; $i <= 100000000; $i++) #for ($i = 2; $i <= 1000; $i++) { my $l = int(length($i)/2) + 1; next if (substr($i,0,$l) ne reverse(substr($i,-1 * $l))); my $j = 0; my $k = 0; my $found = 0; for ($j = 0; $j <= 10000; $j++) { my $start = $j; my $runsum = $p[$j]; for ($k = $j+1; $k <= 10000; $k++) { $runsum += $p[$k]; if ($runsum == $i) { print $i . "\n"; $sum += $runsum; $count++; $found = 1; last; } last if ($runsum > $i || $found); } last if ($p[$j] > $i) || $found; } } print "Count = $count\n"; print "Sum = $sum\n";