Problem Description
度熊发现,111, 333 以及 999 这三个数字很神奇,它们的所有的倍数的每位数字的和一定是自己的倍数。例如说: 545454 是 333 的倍数,同时 5+4=95+4 = 95+4=9 也是 333 的倍数。在另一个例子 666666666 是 999 的倍数,同时 6+6+6=186+6+6 = 186+6+6=18 也是 999 的倍数。
度熊又发现,除了 111, 333, 999 以外的的正整数,虽然并不满足"所有的倍数的每位数字的和一定是自己的倍数",但也存在一些数是它们的倍数且各位数字和也是它们的倍数。例如说,888888888 是 121212 的倍数,且他的各位数字和 8+8+8=248+8+8=248+8+8=24 也是 121212 的倍数。
现在度熊想知道,给你一个正整数 VVV,是否存在一个数 xxx,使得 VVV 是 xxx 的倍数,同时它的每位数字的和也是 xxx 的倍数呢?请找出所有这样的数 xxx。
Input
有多组询问,第一行包含一个正整数 TTT 代表有几组询问,接着每组测试数据占一行,包含一个正整数 VVV。
•1≤T≤1001 \le T \le 1001≤T≤100
•1≤V≤1091 \le V \le 10^91≤V≤10
9
Output
对于每一个询问,输出两行,第一行包含一个正整数 mmm,mmm 代表对于该询问的 VVV,有几个满足条件的 xxx。第二行输出 mmm 个数,把所有满足条件的 xxx 由小到大输出。
Sample Input
3
1
9
666666
Sample Output
Copy1
1
3
1 3 9
6
1 2 3 6 9 18
Note
第一个询问中,111 的各位数和为 1=1×11 = 1 \times 11=1×1,本身等于 1×11 \times 11×1 都是 111 的倍数,故 111 确实为 V=1V=1V=1 的答案。
第三个询问中,666666666666666666 的各位数和为 36=9×436 = 9 \times 436=9×4,本身等于 9×74749 \times 74749×7474 都是 999 的倍数,故 999 确实为 V=666666V=666666V=666666 的答案,经过仔细计算后能发现,除 999 以外, 1,2,3,6,181,2,3,6,181,2,3,6,18 也都是答案。
思路:直接枚举,分理出来每位。
using namespace std;
int f(long long x)
{
long long sum=0;
while(x)
{
sum+=x%10;
x=x/10;
}
return sum;
}
int main()
{
int T;
long long ans=0;
cin>>T;
while(T--)
{
vector<int>v;
int n;
cin>>n;
ans=f(n);
int cnt=0;
for(int i=1;i<=ans;i++)
{
if(ans%i==0&&n%i==0)
{
v.push_back(i);
cnt++;}
}
cout<<cnt<<endl;
for(int i=0;i<cnt;i++)
{
if(i!=cnt-1)
printf("%d ",v[i]);
else cout<<v[i]<<endl;
}
}
return 0;
}