题目描述
设x为一个十进制正整数,定义s(x)为x的每一位上的数字之和,如s(123) = 1+2+3 = 6 对于如下方程:x = b*(s(x)^a)+c 给出a,b,c的值,要求找出[1,999999999]内所有符合条件的x,并从小到大输出
输入数据
三个正整数,分别代表a,b,c 1<=a<=5 1<=b<=10000 -10000<=c<=10000
输出数据
第一行为一个正整数n,代表符合条件的x的个数 第二行为n个递增的数,代表所有符合条件的x
样例输入
3 2 8
样例输出
3
10 2008 13726
程序分析
解题思路
寻找枚举变量:不要使用变量x,而是,变量x上各位数字之和bitSum满足 x = b*(s(x)
a)+c的等式,x的取值范围,限制了temp=b*(s(x)
a)+c的取值也为[1,999999999]若 x = b*(s(x)
a)+c,则s(x)=s( b*(s(x)
a)+c ) 因为,x_bitSum == s(x) 所以,x_bitSum == s(_temp)
代码1(暴力枚举变量x,数量级的大的数据,耗时特别长)
a
, b
, c
= map(int, input().split
())
total
= 0
numList
= []
for i
in range(1, 1000000000):
temp
= sum(list(map(int, str(i
))))
if b
* pow(temp
, a
) + c
== temp
:
numList
.append
(temp
)
total
+= 1
print(total
)
for i
in range(total
- 1):
print(numList
[i
], end
=" ")
print(numList
[total
- 1])
代码2(将变量x的各位数字之和作为枚举变量)
def judge(_temp
, x_bitSum
):
sum = 0
while _temp
> 0:
sum += _temp
% 10
_temp
//= 10
return sum == x_bitSum
a
, b
, c
= map(int, input().split
(" "))
numList
= []
for bitSum
in range(1, 82):
temp
= b
* pow(bitSum
, a
) + c
if 1 <= temp
<= 999999999 and judge
(temp
, bitSum
):
numList
.append
(temp
)
print(len(numList
))
for i
in range(len(numList
)-1):
print(numList
[i
], end
=" ")
print(numList
[len(numList
)-1])