"Нарциссические числа" - это n цифр, где сумма всей n-й степени их цифр равна числу.
Итак, 153
является нарциссическим числом, потому что 1^3 + 5^3 + 3^3 = 153
.
Теперь, учитывая N, найдите все нарциссические числа, длина которых равна N цифре?
Мой подход: должен был перебирать все числа, составляя сумму степеней цифр
и проверьте, совпадает ли его с тем же номером, и я рассчитал мощности.
но это не достаточно хорошо, так есть ли более быстрый способ?!
Update: В природе всего 88 нарциссических чисел, а наибольшее - 39 цифр, Но мне просто нужны цифры длиной 12 или меньше.
Мой код:
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);
}
}