约数:当前数能整除这个数。
和判断质数一样的道理,同样是试除法。
约数也一定是成对出现的。在枚举的时候也可以只枚举较小的那一个约数就可以了,较大的那个约数直接算。
#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(n/i!=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;
}