¿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);
}
}