题目描述 给定 n 个正整数
a
i
a_i
ai?,对于每个整数
a
i
a_i
ai?,请你按照从小到大的顺序输出它的所有约数。
输入格式 第一行包含整数 n。
接下来 n 行,每行包含一个整数
a
i
a_i
ai?。
输出格式 输出共 n 行,其中第 i 行输出第 i 个整数
a
i
a_i
ai? 的所有约数。
数据范围
1
≤
n
≤
100
,
2
≤
a
i
≤
2
×
1
0
9
1≤n≤100, 2≤a_i≤2×10^9
1≤n≤100,2≤ai?≤2×109 输入样例:
2
6
8
输出样例:
1 2 3 6
1 2 4 8
思路 和上题求因子的类似,从1开始遍历,遍历到sqrt(n)即刻找到所有的约数,然后这里需要进行一次排序,输出从小到大的约数。 代码示例
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> get_divisors(int x)
{
vector<int> q;
for(int i = 1; i <= x / i; i ++)
{
if(x % i == 0)
{
q.push_back(i);
if(i != x / i) q.push_back(x / i);
}
}
sort(q.begin(), q.end());
return q;
}
int main()
{
int n;
cin >> n;
while(n --)
{
int x;
cin >> x;
auto q = get_divisors(x);
for(auto x : q) cout << x << ' ';
cout << endl;
}
return 0;
}
|