xを決め打ちする

#include <iostream>
using namespace std;

long long a, n, m;
bool check(int x){
  long long y = 0;
  long long v = x;
  while(v){
    y += v%10;
    v /= 10;
  }
  long long w = 1;
  for ( int i = 0; i < n; i++){
    w *= (y + a);
  }
  return x == w;
}

int main() {
  cin >> a >> n >> m;
  int cnt = 0;
  for ( int x = 1; x <= m; x++ ){
    if ( check(x) ) cnt++;
  }
  cout << cnt << endl;
}  

yを決め打ちする

#include <iostream>
using namespace std;

long long a, n, m;
long long val(long long x){
  long long sum = 0;
  while(x){
    sum += x%10;
    x /= 10;
  }
  return sum;
}

int solve(){
  int cnt = 0;
  for ( int y = 1; y <= 72; y++ ){
    long long x = 1;
    for ( int t = 1; t <= n; t++ ){
      x *= (y+a);
    }
    if (x <= m && val(x) == y) cnt++;
  }
  return cnt;
}

int main() {
  cin >> a >> n >> m;
  cout << solve() << endl;
}