sub sieve { my%p=(2,2);for my$n(3..pop){grep$n==($p{$_}+=$_*($p{$_}<$n)),keys%p or$p{$n}=$n}keys%p } for( @ARGV ) { print "$_: ",join(" ",sort{$a<=>$b}sieve($_)),$/; }