Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
29
Task/Partition-function-P/Perl/partition-function-p.pl
Normal file
29
Task/Partition-function-P/Perl/partition-function-p.pl
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
no warnings qw(recursion);
|
||||
use Math::AnyNum qw(:overload);
|
||||
use Memoize;
|
||||
|
||||
memoize('partitionsP');
|
||||
memoize('partDiff');
|
||||
|
||||
sub partDiffDiff { my($n) = @_; $n%2 != 0 ? ($n+1)/2 : $n+1 }
|
||||
|
||||
sub partDiff { my($n) = @_; $n<2 ? 1 : partDiff($n-1) + partDiffDiff($n-1) }
|
||||
|
||||
sub partitionsP {
|
||||
my($n) = @_;
|
||||
return 1 if $n < 2;
|
||||
|
||||
my $psum = 0;
|
||||
for my $i (1..$n) {
|
||||
my $pd = partDiff($i);
|
||||
last if $pd > $n;
|
||||
if ( (($i-1)%4) < 2 ) { $psum += partitionsP($n-$pd) }
|
||||
else { $psum -= partitionsP($n-$pd) }
|
||||
}
|
||||
return $psum
|
||||
}
|
||||
|
||||
print partitionsP($_) . ' ' for 0..25; print "\n";
|
||||
print partitionsP(6666) . "\n";
|
||||
Loading…
Add table
Add a link
Reference in a new issue