算法
试除法
试除法求约数
vector<int> get_divisors(int n){
vector<int> res;
for(int i = 1; i <= n / i; i ++){//约数成对出现,i 和 n / 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;
}
主要思想
试除法(判断每个数能否被n整除)
时间复杂度
O(sqrt(n))
C++ 代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int n;
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);//当i*i=n时,只放一遍
}
}
sort(res.begin(),res.end());
return res;
}
int main(){
cin>>n;
while(n--){
int a;
cin>>a;
auto res=get_divisors(a);
for(auto t:res) cout<<t<<" ";
cout<<endl;
}
return 0;
}