乍一看可能会觉得很难,其实直接枚举即可
因为限定了x < 109.
所以可知s(x)的范围
枚举判断即可
中间数据b*s(x)^a+c可能会爆int,所以要用long long
代码如下:
#include <bits/stdc++.h>
#define LL long long
#define MOD 1000000000
using namespace std;
vector<LL> vec;
LL pows(LL ans, LL a) {
LL tmp = ans;
for(int i=1; i<a; ++i)
ans *= tmp;
return ans;
}
int get(LL tmp) {
int ans = 0ll;
while(tmp) {
ans += tmp%10;
tmp /= 10;
}
return ans;
}
int main(void) {
LL a, b, c, cnt, tmp;
cin >> a >> b >> c;
tmp = cnt = 0ll;
vec.clear();
for(int i=1; i<=90; ++i) {
tmp = pows(i, a)*b+c;
if(tmp >= MOD)
break;
else if(tmp <= 0)
continue;
else if(get(tmp) == i) {
vec.push_back(tmp);
cnt++;
}
}
cout << cnt << endl;
for(int i=0; i<cnt; ++i)
cout << vec[i] << " ";
puts("");
return 0;
}
本文提供了一种方法来解决一个复杂的数学问题,即在给定的参数下找到所有满足特定等式的整数解。通过直接枚举的方法,作者详细解释了如何在限制条件下找到解,并提供了实现此过程的代码示例。
&spm=1001.2101.3001.5002&articleId=38728159&d=1&t=3&u=0630c379ab5a4e20bd000ddcc65da8b4)
575

被折叠的 条评论
为什么被折叠?



