my $target = 5_001; # also tried 5_000 my $max = 1_000_000; my @primes; my $sieve = ''; # generate list of primes for (my $try=2; $try <= $max; $try++) { next if vec($sieve, $try, 1); push @primes, $try; for (my $mults=$try*$try; $mults <= $max; $mults+=$try) { vec($sieve, $mults, 1) = 1; } } # number of composites <= n # http://research.att.com/~njas/sequences/A065855 # # equivalent to number of primes between prime(n) and n, so that's what # i'm doing here for (my $i=0; $i<@primes; $i++) { my $j = 0; $j++ while $primes[$j] <= $i+1; my $count = 0; $j++ && $count++ while $primes[$j] < $primes[$i]; next if $count < $target; printf "%d: %d\n", $i+1, $count; last; }