分解质因子 2
题目描述
给定一个正整数 n n n,设 n = p 1 × p 2 × … p k n = p_1 \times p_2 \times \dots p_k n=p1×p2×…pk,其中 p i p_i pi 均为质数,对 1 ≤ i < k 1 \leq i < k 1≤i<k, p i ≤ p i + 1 p_i \leq p_{i + 1} pi≤pi+1。
可以证明,序列 p i p_i pi 是唯一的。
对每个给定的 n n n,请你求出 p 1 , p 2 , … p k p_1, p_2, \dots p_k p1,p2,…pk。
输入格式
本题单测试点内有多组测试数据。
第一行是一个整数,表示测试数据组数 T T T。
接下来 T T T 行,每行一个整数,表示一组数据的 n n n。
输出格式
对每组数据,输出一行若干个用空格隔开的整数,依次表示 p 1 , p 2 , … p k p_1, p_2, \dots p_k p1,p2,…pk。
样例 #1
样例输入 #1
9
2
3
4
5
6
7
8
9
10
样例输出 #1
2
3
2 2
5
2 3
7
2 2 2
3 3
2 5
提示
数据规模与约定
对全部的测试点,保证 1 ≤ T ≤ 10 1 \leq T \leq 10 1≤T≤10, 1 ≤ n ≤ 1 0 12 1 \leq n \leq 10^{12} 1≤n≤1012。
#include<iostream>
using namespace std;
#define int long long
void slove(){
int n;cin>>n;
for(int i=2;i*i<=n;i++){
if(n%i==0){
while(n%i==0){
cout<<i<<' ';
n/=i;
}
}
}
if(n>1)cout<<n;
cout<<"\n";
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie();
int T;cin>>T;
while(T--)slove();
return 0;
}