use strict; use warnings; my %lights = map { $_ => 1 } ( 1..20_000 ); foreach my $flipper ( 2..20_000) { for( my $i = $flipper; $i <= 20_000; $i += $flipper ){ $lights{ $i } = !$lights{ $i }; } } # print 'em print join(', ', grep { defined $_ } map { $lights{ $_ } ? $_ : undef } ( 1..20_000) )."\n";