source code for "files/pe/pe_044.pl"
return to portfolio
- #!/usr/bin/perl
- use strict;
- use warnings;
- # get n given pent(n)
- sub inv_pent {
- my ($n) = shift;
- return (1 + sqrt(1+24*$n))/6;
- }
- # is pentagonal?
- sub is_pent {
- my ($n) = inv_pent shift;
- return $n == int $n ? 1 : 0;
- }
- # get n-th pentagonal
- sub pent {
- my ($n) = shift;
- return $n*(3*$n-1)/2;
- }
- my @diffs;
- for my $p (1..10000000) {
- next unless is_pent $p;
- for my $m (1.. int inv_pent $p) {
- my $pent = pent $m;
- my ($n) = inv_pent($p+$pent);
- if ($n == int $n) {
- print "** $p = P_$n - P_$m\n" if is_pent(pent($n) + $pent);
- }
- }
- }