约数是什么
约数,又叫因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
例如
a % b =0
a是b的倍数,b是a的约数。
试除法
原理: 约数是成对出现 当d%n == 0 时, (n % d ) % n =0
所以d 与 n%d 是成对出现的 我们只需要扫描到前面即可 即枚举范围为 1~n/d
时间复杂度 : O(sqrt(n))
代码
#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(i != n /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;
}
ps:代码来自acwing 的试除法求约数