直接把数字各个位上的数字求和枚举就行了因为9*9==81,这样时间复杂度就下来了;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//ll gcd(ll a,ll b){
// return b?gcd(b,a%b):a;
//}
ll Num(ll n){
ll res=0;
while(n){
res+=n%10;
n/=10;
}
return res;
}
int main(){
ll T,a[100];
scanf("%lld",&T);
while(T--){
ll n;
memset(a,0,sizeof(a));
scanf("%lld",&n);
ll num=Num(n),ans=0;
for(ll i=1;i<=num;i++){
if(n%i==0&&num%i==0){
a[ans++]=i;
}
}
printf("%lld\n",ans);
for(int i=0;i<ans;i++){
printf("%lld%c",a[i],i==ans-1?'\n':' ');
}
}
return 0;
}