#! /usr/bin/perl use strict; use Math::BigInt lib=>"GMP"; sub partitions { my $n = shift; my @partitions = Math::BigInt->new(1); for my $i (1..$n) { my $sign = 1; my $j = 1; while (1) { my $k = $j*(3*$j-1)/2; last if $k > $i; $partitions[$i] += $sign*$partitions[$i-$k]; $k = $j*(3*$j+1)/2; last if $k > $i; $partitions[$i] += $sign*$partitions[$i-$k]; $sign *= -1; $j++; } } return $partitions[$n]; } print "$_: ", partitions($_), "\n" for @ARGV;