Help for this page

Select Code to Download


  1. or download this
    use strict; 
    my %npart; sub cntpart1 { my($n, $m) = @_; $n = 0+$n; $m = 0+$m; my $c
    + = \$npart{$n." ".$m}; defined($$c) and return $$c; $n <= 0 and retur
    +n $$c = 1; my $s = 0; for my $k (1 .. ($m < $n ? $m : $n)) { $s += cn
    +tpart1($n - $k, $k); } $$c = $s; } 
    sub randpart1 { my($n, $m) = @_; $n <= 0 and return; my($s, $k) = 0; f
    +or my $j (1 .. ($m < $n ? $m : $n)) { my $p = cntpart1($n - $j, $j); 
    +rand($s += $p) < $p and $k = $j; } $k, randpart1($n - $k, $k); } 
    sub randpart { my($n) = @_; randpart1($n, $n); }
    
  2. or download this
    perl -we 'use strict; my %npart; sub cntpart1 { my($n, $m) = @_; $n = 
    +0+$n; $m = 0+$m; my $c = \$npart{$n." ".$m}; defined($$c) and return 
    +$$c; $n <= 0 and return $$c = 1; my $s = 0; for my $k (1 .. ($m < $n 
    +? $m : $n)) { $s += cntpart1($n - $k, $k); } $$c = $s; } sub randpart
    +1 { my($n, $m) = @_; $n <= 0 and return; my($s, $k) = 0; for my $j (1
    + .. ($m < $n ? $m : $n)) { my $p = cntpart1($n - $j, $j); rand($s += 
    +$p) < $p and $k = $j; } $k, randpart1($n - $k, $k); } sub randpart { 
    +my($n) = @_; randpart1($n, $n); } for (1 .. 10000) { print join(" ", 
    +randpart($ARGV[0])), "\n"; }' 6 | sort | uniq -c