题目描述
给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一个整数 ai。
输出格式
输出共 n 行,其中第 i 行输出第 i 个整数 ai 的所有约数。
数据范围
1≤n≤100,
2≤ai≤2×109
样例
输入样例:
2
6
8
输出样例:
1 2 3 6
1 2 4 8
算法1
(暴力枚举) $O(根号n)$
试除法 与试除法求素数同,只用求出一个小的因数即可。
该题学习的点
1.看到这道题,觉得难点在于怎么存放约数和完成其大小排序
2.刚开始想到的是用数组。
3.之后看了视频 用的是vector(动态数组) ,之后用sort排序sort(res.begin(), res.end());
for(auto t:res) cout<<t即可。直接利用for遍历,不用迭代器
要注意 如果i和n/i 相同 时只用存放一个即可
4. 之后看到可以用set存储,更加方便。自带去重和排序功能
C++ 代码
#include<bits/stdc++.h>
#include<set>
using namespace std;
void qxs(int n){
set<int> s;
for(int i=1;i<=n/i;i++){
if(n%i==0){
s.insert(i);
s.insert(n/i);
}
}
set<int>::iterator it=s.begin(); //set不是数组 不能用foreach遍历 但vector可以
for(it;it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
qxs(n);
}
return 0;
}