1052. Self-Numbers
暂无测试数据。
题目描述
在 1949 年印度数学家 D.R.Daprekar 发现了一类称作 Self-Numbers 的数。
对于每一个正整数 \(n\),
我们定义 \(d(n)\) 为 \(n\) 加上它每一位数字的和。
例如,d(75)=75+7+5=87。
给定任意正整数 \(n\) 作为一个起点,
都能构造出一个无限递增的序列:
n, d(n), d(d(n)), d(d(d(n))), . . .
例如,如果你从33开始,下一个数是33+3+3=39,
再下一个为 39+3+9=51,
再再下一个为 51+5+1=57,
因此你所产生的序列就像这样:
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, . . .
数字 \(n\) 被称作 \(d(n)\) 的发生器。
在上面的这个序列中,
33 是 39 的发生器,39 是 51 的发生器,51 是 57 的发生器等等。
有一些数有超过一个发生器,
如 101 的发生器可以是 91 和 100。
一个没有发生器的数被称作 Self-Number。
如前 13 个 Self-Number 为 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97。
我们将第 \(i\) 个 Self-Number 表示为 \(a[i]\),
所以, a[1]=1, a[2]=3, a[3]=5. . .
输入
输入包含整数 \(N\)、\(K\)、\(s_1 \cdots s_k\),以空格和换行分割。
输出
在第一行你需要输出一个数,
这个数表示在闭区间 [1, N] 中 Self-Number的数量。
第二行必须包含以空格划分的 \(K\) 个数,
表示 \(a[s_1] \cdots a[s_k]\),
这里保证所有的 \(a[s_1] \cdots a[s_k]\) 都小于 \(N\)。
(例如,如果 \(N=100\),\(s_k\) 可以为 1-13,但不能为14,因为 \(a[14]=108>100\) )
样例输入
100 10
1 2 3 4 5 6 7 11 12 13
样例输出
13
1 3 5 7 9 20 31 75 86 97
数据范围限制
\(1 \leq N \leq 10^7\),\(1 \leq K \leq 5000\)
来源
入门篇练习5.6.2
信息
- ID
- 1051
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者