¿Cómo generar números narcisistas más rápido?

Los "números narcisistas" son números de n dígitos donde la suma de todas las potencias n. ° de sus dígitos es igual al número.

Asi que,153 Es un número narcisista porque1^3 + 5^3 + 3^3 = 153.

Ahora, dada N, encuentra todos los números narcisistas que tienen la longitud de N dígitos?

Mi acercamiento : era iterar sobre todos los números haciendo sumas de potencias de dígitos

y verifique si es el mismo número o no, y yo calculé las potencias.

Pero eso no es lo suficientemente bueno, entonces, ¿hay alguna manera más rápida?

Actualizar: En la naturaleza solo hay 88 números narcisistas, y el más grande tiene 39 dígitos, pero solo necesito números con una longitud de 12 o menos.

Mi código :

long long int powers[11][12];
// powers[x][y] is x^y. and its already calculated

bool isNarcissistic(long long int x,int n){
    long long int r = x;
    long long int sum = 0;

    for(int i=0; i<n ; ++i){
        sum += powers[x%10][n];
        if(sum > r)
            return false;
        x /= 10;
    }
    return (sum == r);
}

void find(int n,vector<long long int> &vv){
    long long int start = powers[10][n-1];
    long long int end = powers[10][n];

    for(long long int i=start ; i<end ; ++i){
        if(isNarcissistic(i,n))
            vv.push_back(i);
    }
}

Respuestas a la pregunta(9)

Su respuesta a la pregunta