1、试除法求约数
主要还是可以成对的求约数进行优化,不然会超时。
时间复杂度根号n
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int n;vector<int> solve(int a)
{vector<int> res;for(int i = 1; i <= a / i; i ++ ){if(a % i == 0){res.push_back(i);if(a / i != i)res.push_back(a / i);}}sort(res.begin(), res.end());return res;
}int main ()
{cin>>n;while(n -- ){int a;cin>>a;auto t = solve(a);for(auto x : t)cout<<x<<' ';cout<<endl;}return 0;
}
2、约数个数
主要是要理解算术基本定理:
约数个数:(a1+1)(a2+2)…