题目描述
给定n个正整数,对于每个整数请你按照从小到大的顺序输出它的所有约数。
样例
输入:2 6 8
输出:
1 2 3 6
1 2 4 8
思想:试除法(判断每个数能否被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;
}
时间复杂度应该乘上n吧 O nsqrt(ai) sqrt(ai) 最大为10 ^9 所以运算次数在 10^6 这个量级
这里vector res其实不需要排序,你只要从末尾输出即可
应该需要排序,是按约数首尾存入容器的,就算末尾输出也是乱的