for my $witness (2..int((10**length($i) - 1) / $i)) { if ($i_sorted eq join '', sort split //, $i * $witness) { if (++$pairs == $count) { ++$qualifying_integers; next I; } } } # maximum witness can't be more than i's first digit for my $witness (2..substr $i, 0, 1) { if (!( $i % $witness ) && $i_sorted eq join '', sort split //, $i / $witness) { if (++$pairs == $count) { ++$qualifying_integers; next I; } } }