HDU6674 度度熊与数字
度熊发现,1, 3 以及 9 这三个数字很神奇,它们的所有的倍数的每位数字的和一定是自己的倍数。例如说: 54 是 3 的倍数,同时 5+4=9 也是 3 的倍数。在另一个例子 666 是 9 的倍数,同时 6+6+6=18 也是 9 的倍数。
度熊又发现,除了 1, 3, 9 以外的的正整数,虽然并不满足"所有的倍数的每位数字的和一定是自己的倍数",但也存在一些数是它们的倍数且各位数字和也是它们的倍数。例如说,888 是 12 的倍数,且他的各位数字和 8+8+8=24 也是 12 的倍数。
现在度熊想知道,给你一个正整数 V,是否存在一个数 x,使得 V 是 x 的倍数,同时它的每位数字的和也是 x 的倍数呢?请找出所有这样的数 x。
Input
有多组询问,第一行包含一个正整数 T 代表有几组询问,接着每组测试数据占一行,包含一个正整数 V。
-
1≤T≤100
-
1≤V≤109
Output
对于每一个询问,输出两行,第一行包含一个正整数 m,m 代表对于该询问的 V,有几个满足条件的 x。第二行输出 m 个数,把所有满足条件的 x 由小到大输出。
Examples
Sample Input
3
1
9
666666
Sample Output
1
1
3
1 3 9
6
1 2 3 6 9 18
Note
第一个询问中,
1
1
1 的各位数和为
1
=
1
×
1
1 = 1 \times 1
1=1×1,本身等于
1
×
1
1 \times 1
1×1 都是
1
1
1 的倍数,故
1
1
1 确实为
V
=
1
V=1
V=1 的答案。
第三个询问中, 666666 666666 666666 的各位数和为 36 = 9 × 4 36 = 9 \times 4 36=9×4,本身等于 9 × 7474 9 \times 7474 9×7474 都是 9 9 9 的倍数,故 9 9 9 确实为 V = 666666 V=666666 V=666666 的答案,经过仔细计算后能发现,除 9 9 9 以外, 1 , 2 , 3 , 6 , 18 1,2,3,6,18 1,2,3,6,18 也都是答案。
Hint
题意:
题解:
经验小结:
#include<bits/stdc++.h>
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef long long LL;
const int inf = 1<<30;
const int maxn = 1e5+10;
//const LL inf = 0x3f3f3f3f3f3f3f3f;
vector<int> ans;
int main()
{
int T, v;
cin >> T;
while(T--){
ans.clear();
cin >> v;
int vt = 0, m = 0, t = v;
while(t > 0){
vt += t%10;
t /= 10;
}
for(int i = 1; i <= vt; ++i)
if(v%i==0 && vt%i==0){
ans.push_back(i);
++m;
}
cout << m << endl;
for(int i = 0; i < m-1; ++i)
cout << ans[i] << ' ';
cout << ans[m-1] << endl;
}
return 0;
}