AcWing 869. 试除法求约数
原题链接
简单
作者:
满目星河_0
,
2021-04-10 14:19:38
,
所有人可见
,
阅读 168
试除法求约数(超详细解释)
//算法思想:约数(因数)
//与试除法求所有的质数的方法类似,只需要根号n的时间复杂度,从前往后遍历小于n的所有的数,每次判断这个数
//能不能被n整除,如果整除直接找到一对约数,存入vector数组。注意如果当前的这一对约数相等,那么只需push一
//次vector数组。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> getys(int a){
vector<int> res;
for(int i=1;i<=a/i;i++){//与试除法求所有的质数的方法一样都是循环到a/i
if(a%i==0){
res.push_back(i);//把找到的第一个约束加入数组
if(a/i!=i) res.push_back(a/i);//如果不是a的平方根,说明是两个不同的约数。
}
}
sort(res.begin(),res.end());//对得到的所有的约数排序
return res;
}
int main(){
int n;
cin>>n;
while(n--){
int a;
cin>>a;
auto res=getys(a);
for(auto t:res){//表示输出所有res中的数
cout<<t<<" ";
}
cout<<endl;
}
return 0;
}