{ $s=eval join'+', @d = grep !($n%$_), 1..++$n-1; eval { w(@d, $n) if $s > $n}; print $n,$/ if $@ =~ /!/; redo } sub w{ my $s = pop || die; my $t = pop || die '!'; eval { w( @_, $s-$t) }, $@ =~ /!/ || die if $t <= $s; w( @_, $s) }