Perl, 173
Déjame agregar otra solución inútil. Esta solución es tan lenta que ni siquiera puede mostrar nada más allá del primer número extraño. Me atrevo a decir que es la solución más lenta de todas aquí.
$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++}
Manifestación
El mismo código escrito en Java (con el que me siento más cómodo) ni siquiera puede reconocer el segundo número extraño (836), y ya he alimentado el número directamente al método de verificación (en lugar de recorrer y verificar cada número).
El núcleo de esta solución se encuentra en la expresión regular:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+
Y cómo se configura la cadena para que sea 3 veces el número que estamos comprobando.
La longitud de la cadena está configurada para que sea 3 veces el número que estamos verificando i: los primeros 2 ison para la suma de factores coincidentes y el último 1 iestá reservado para verificar si un número es un factor de i.
(?=(.+)\1{2}$) se utiliza para capturar el número que estamos verificando.
((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+coincide con los factores del número. La iteración posterior coincidirá con un factor más pequeño que una iteración anterior.
- Podemos ver que estas 2 partes
(.+)y (?=.*(?=\1$)\3+$)juntas seleccionan un factor del número que se verifica.
(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$)) se asegura de que el factor seleccionado sea más pequeño que el número que se verifica en la primera iteración, y es más pequeño que el factor anterior en las iteraciones posteriores.
La expresión regular intenta hacer coincidir tantos factores del número como sea posible dentro del límite de 2 i. Pero no nos importa el valor real de la suma de divisores, solo nos importa si el número es abundante.
Luego, la segunda expresión regular, que es la primera expresión regular con \1{2}$agregado. Como resultado, la expresión regular se asegura de que la suma de (algunos) factores del número que se verifica sea igual al número mismo:
^(?=(.+)\1{2}$)((.+)(?=.*(?(2)(?=\2$)\3.+$|(?=\1$)\3.+$))(?=.*(?=\1$)\3+$))+\1{2}$
La restricción añadida hará que el motor de expresiones regulares realice una búsqueda de retroceso en todos los subconjuntos posibles de factores, por lo que será extremadamente lento.