#include <bits/stdc++.h>
usingnamespacestd;//n<=sz^2이 되도록 sz 적당히 크게 잡기.//고쳐야 할 부분 (1)~(2)constintsz=3163;//(1)boolno_prime[sz+1]={true,true};vector<int>prime;intmain(){intn;scanf("%d",&n);for(inti=2;i*i<=n;i++)//(2)if(!no_prime[i]){prime.push_back(i);for(intj=i*2;j<=sz;j+=i)no_prime[j]=true;}for(inti:prime)while(n%i==0){printf("%d\n",i);n/=i;}//prime 벡터에 없는 큰 소수가 남았다면 직접 출력.if(n!=1)printf("%d",n);return0;}
#include <bits/stdc++.h>
usingnamespacestd;//n<=sz이 되도록. n은 소인수분해 할 가장 큰 수.constintsz=5000000;intunder_prime[sz+1];//under_prime[i] : i을 나누는 가장 작은 소수.voidlogsieve(){under_prime[1]=1;//1+(1/2)+(1/3)+...+(1/sz) 는 log sz로 수렴.for(inti=2;i<=sz;i++)if(!under_prime[i])for(intj=i;j<=sz;j+=i)if(!under_prime[j])under_prime[j]=i;}intmain(){//메인에서 함수 실행하기.logsieve();intn;scanf("%d",&n);while(n--){intk;scanf("%d",&k);vector<int>factor;while(k>1){factor.push_back(under_prime[k]);k/=under_prime[k];}for(inti:factor)printf("%d ",i);printf("\n");}return0;}