题意:题意应该不用说了.....
解题思路:先转化一下给出的公式 x = b·s(x)a + c 变为 (x - c)/ b = s(x)a a,b,c已知 所以只要去枚举s(x) 的值 求出x 然后算一下 x各个位数的和是否和 s(x)相同就可以了 因为x最大是999999999 所以s(x) 最大是81 最小是1
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<iostream>
#include<map>
#include<set>
#include<queue>
#include<list>
#include<stack>
#include<vector>
#include<math.h>
#include<stdlib.h>
#include<time.h>u
using namespace std;
#define ll __int64
#define mem(a) memset(a,0,sizeof(a))
#define CLR(a, b) memset(a, b, sizeof(a))
#define INF 0x3f3f3f
ll digit(ll x){
ll sum = 0;
while(x > 0){
sum += x % 10;
x /= 10;
}
return sum;
}
set<ll> s;
int main(){
ll a,b,c;
while(scanf("%I64d%I64d%I64d",&a,&b,&c) != EOF){
s.clear();
ll sum = 0;
for(ll i = 1;i <= 81;i++){
ll ans = pow(i*1.0,a*1.0) * b + c;
if(digit(ans) == i && ans > 0 && ans <= 999999999){
sum ++;
s.insert(ans);
}
}
if(sum == 0){
puts("0");
continue;
}
else printf("%I64d\n",sum);
set<ll>::iterator it;
bool put = false;
for(it = s.begin();it != s.end();it++){
if(!put) printf("%d",*it),put = true;
else printf(" %d",*it);
}
puts("");
}
return 0;
}