约数枚举
vector<int> vi;
void dis(int x)
{
for (int i = 1; i * i <= x; ++i){
if (x % i == 0){
vi.push_back(i);
if (i != x / i) vi.push_back(x / i);
}
}
}
整数分解
map<int, int> mii;
void dis(int x)
{
for (int i = 2; i * i <= x; ++i){
while (x % i == 0){
++mii[i];
x /= i;
}
}
if (x != 1) ++mii[x];
}
快速整数分解(时间复杂度log(n)到sqrt(n))
vector<int> prime;
bool tp[maxn];
map<int, int> mii;
void init()
{
for (int i = 2; i < maxn; ++i){
if (!tp[i]){
prime.emplace_back(i);
for (int j = 2; j * i < maxn; ++j){
tp[j * i] = 1;
}
}
}
}
void dis(int x)
{
for (int i : prime){
if ((ll)i * i > x) break;
while (x % i == 0){
++mii[i];
x /= i;
}
}
if (x != 1) ++mii[x];
}