Description
Example
input
4
2
360
4999999937
4998207083
output
1
2
3
2 2 90
1
4999999937
1
4998207083
Solution
显然答案为分解质因数后个数最多的那个质因数的个数,设为k
构造成k-1个该因子+1个剩下的数
Code
map<ll,int>fac;
ll solve(ll n) {
ll mx = 0, cnt = 0;
fac.clear();
for(ll i = 2;i * i <= n;++i) {
if(n % i == 0) {
while(n%i==0) {fac[i]++;n /= i;}
if(fac[i] > cnt) {cnt = fac[i];mx = i;}
}
}
if(n>1) {fac[n]++;if(fac[n] > cnt)cnt = fac[n], mx = n;}
return mx;
}
int main() {
int T;scanf("%d",&T);
while(T--) {
ll n;scanf("%lld",&n);
ll s = solve(n);
int sz = fac[s];
printf("%d\n", sz);
for(int i = 1;i < sz;++i) printf("%lld ", s), n/=s;
printf("%lld\n", n);
}
return 0;
}