约数是成对出现的,如6=2*3,知道小的约数2同时也能知道大的约数3,那么枚举时只需要枚举到
n
\sqrt n
n即可。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
vector<int> get_divisors(int a) {
vector<int> res;
for (int i = 1; i * i <= a; i ++ ) {
if (a % i == 0) {
res.push_back(i);
if (a / i != i) // 防止平方重复
res.push_back(a / i);
}
}
sort(res.begin(), res.end());
return res;
}
int main() {
int a;
scanf("%d", &n);
while (n --) {
scanf("%d", &a);
vector<int> res = get_divisors(a);
for (auto t : res) printf("%d ", t);
printf("\n");
}
return 0;
}