【每日算法】基础算法——试除法求约数(五十七)

题目内容

给定n个正整数ai,对于每个整数ai,请你按照从小到大的顺序输出它的所有约数。

输入格式

第一行包含整数n。

接下来n行,每行包含一个整数ai。

输出格式

输出共n行,其中第 i 行输出第 i 个整数ai的所有约数。

数据范围

1≤n≤100,
2≤ai≤2*10^9

输入样例

2
6
8

输出样例

1 2 3 6
1 2 4 8

题解

由于约数也是成对出现,因此只需要把小于n/i的约数找到即可,剩下的因为配对一定可以找到。

代码

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

vector<int> get_divisors(int n){
vector<int> res;
for(int i = 1; i <= n / i; i++){
if(n % i == 0){
res.push_back(i);
if(i != n / i) res.push_back(n / i);
}
}
sort(res.begin(),res.end());
return res;
}

int main(){
int n;
cin >> n;

while(n --){
int x;
cin >> x;
auto res = get_divisors(x);
for(auto t : res) cout << t << ' ';
cout<< endl;
}
return 0;
}
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/01/29/【每日算法】基础算法——试除法求约数(五十七)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号