Perl, 173
Deixe-me adicionar outra solução inútil. Essa solução é tão lenta que nem consegue produzir nada além do primeiro número estranho. Ouso dizer que é a solução mais lenta de todas aqui.
$n=<>;$i=2;while($n){$b=qr/^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+/;$_='x'x3x$i;if(/$b/&&($+[0]>$i)&&!/$b\1{2}$/){print"$i\n";$n--}$i++}
Demo
O mesmo código escrito em Java (com o qual me sinto mais confortável) não consegue nem reconhecer o segundo número estranho (836), e eu já alimentei o número diretamente no método de verificação (em vez de repetir e verificar todos os números).
O núcleo desta solução está no regex:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+
E como a string é configurada para ser 3 vezes o número que estamos verificando.
O comprimento da string é configurado para ser 3 vezes o número que estamos verificando i: os 2 primeiros isão para somar os fatores e o último 1 ié reservado para verificar se um número é um fator dei .
(?=(.+)\1{2}$) é usado para capturar o número que estamos verificando.
((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+corresponde aos fatores do número. A iteração posterior corresponderá a um fator menor que a iteração anterior.
- Podemos ver que essas duas partes
(.+)e (?=.*(?=\1$)\3+$)juntas selecionam um fator do número que está sendo verificado.
(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$)) garante que o fator selecionado seja menor que o número verificado na primeira iteração e menor que o fator anterior nas iterações subseqüentes.
A regex tenta corresponder ao maior número possível de fatores dentro do limite de 2 i . Mas não nos importamos com o valor real da soma dos divisores, apenas nos importamos se o número é abundante.
Em seguida, o segundo regex, que é o primeiro regex \1{2}$adicionado. Como resultado, o regex garante que a soma de (alguns) fatores do número que está sendo verificado seja igual ao próprio número:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+\1{2}$
A restrição adicionada fará com que o mecanismo regex execute uma pesquisa de retorno em todos os subconjuntos possíveis de fatores, por isso será extremamente lento.