sub pick_one
{
my($from,$to) = @_;
for(my $i=$from;$i<=$to;$i++)
{
return $i if(rand(1) <= 1/($to-$i+1));
}
}
####
sub pick_n
{
my($n,$from,$to) = @_;
my(@picked);
for(my $i=$from;$i<=$to;$i++)
{
if(rand(1) <= ($n/($to-$i+1)))
{
push(@picked,$i);
$n--;
}
}
return @picked;
}
####
my(@counts);
for(my $i=0;$i<100000;$i++)
{
foreach my $c (pick_n(3,1,10))
{
$counts[$c]++;
}
}
for(my $c=0;$c<=$#counts;$c++)
{
print "Count[$c] = $counts[$c]\n";
}
####
Count[0] =
Count[1] = 29974
Count[2] = 30044
Count[3] = 29860
Count[4] = 29949
Count[5] = 30167
Count[6] = 30253
Count[7] = 29808
Count[8] = 30092
Count[9] = 29830
Count[10] = 30028