遍历因子

int x = a[i];
vector<int> p;
while (minp[x]) {
int c = minp[x];
p.emplace_back(minp[x]);
while (x % c == 0) x /= c;
}
x = a[i];
int m = p.size();
vector<int> c(m);
for (int i = 0; i < m; i++) {
while (x % p[i] == 0) {
x /= p[i];
c[i]++;
}
}
auto dfs = [&](auto self, int idx, int cur) -> void {
if (idx == m) {
// do-something
return;
}
for (int i = 0; i <= c[idx]; i++) {
self(self, idx + 1, cur);
cur *= p[idx];
}
};
dfs(dfs, 0, 1);