1234567891011121314151617181920212223///类似于动态规划的记忆化搜索 // 求取小于等于n的所有质数 // 并求取所有合数的质因子 vector<bool> isPrime(n+1, true); vector<vector<int>> factor(n+1); for (int i = 2; i <= n; i++) { // 查看i是否是质数 // 不是质数,则下一个 if (!isPrime[i]) continue; // i是质数 // 遍历i的所有倍数,其倍数必定不是质数,并记录对应的质因子i int m = 2; while ((m * i) <= n) { int cur = m * i; isPrime[cur] = false; factor[cur].push_back(i); m++; } }