题目:
B3715 分解质因子 2 - 洛谷 | 计算机科学教育新生态
题目描述
给定一个正整数 n,设 n=p1×p2×...×pk,其中 pi 均为质数,对 1≤i<k,pi≤pi+1。
可以证明,序列 pi 是唯一的。
对每个给定的 n,请你求出 p1,p2,...,pk。
输入格式
本题单测试点内有多组测试数据。
第一行是一个整数,表示测试数据组数 T。
接下来 T 行,每行一个整数,表示一组数据的 n。
输出格式
对每组数据,输出一行若干个用空格隔开的整数,依次表示 p1,p2,...,pk。
输入输出样例
输入 #1
9
2
3
2
4
5
6
7
8
10
输出 #1
2
3
2 2
2 2
2 3
2 2 2
3 3
2 5
说明/提示
数据规模与约定
对全部的测试点,保证 1≤T≤10,1≤n≤10的12次方。
思路:
题目很明确的告诉我们,pi都是质数,所以我们可以直接枚举2~sqrt(n)就好了。注意,如果n再除去2~sqrt(n)之内的因子,自己本身也可能大于sqrt(n)。所以要特判一下,如果n>1,就输出n。
有人可能会问,那么直接枚举到n不就好了,这样是会超时的。
代码如下:
#include<iostream>
using namespace std;
typedef long long ll;
const ll N = 1e6;
ll T,n;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> T;
while(T--)
{
cin >> n;
for(ll i = 2 ; i * i <= n ; i++)
{
if(n % i == 0)//判断是否是因数
{
while(n % i == 0)
{
cout << i << " ";//输出因数i
n = n / i;//更新n
}
}
}
if(n > 1)//n剩下来的数就是比sqrt(n)大,也是一个质数。
cout << n << " ";
cout << '\n';
}
return 0;
}