遍历因子
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);