C++求1到n每个数的因数个数:筛法实现与线性筛优化
## 🔢 问题理解 您提到的“P3772因数个数”可能指洛谷(Luogu)上的题目 P3772(“因数个数”),该题要求计算给定区间内每个数的因数个数。由于题目描述未完整给出,以下基于常见解法提供 C++ 实现。 ## 💻 C++ 解法示例 若题目要求计算 1 到 n 中每个数的因数个数,常见做法是使用**筛法**(类似埃氏筛)预处理。 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> divCnt(n + 1, 0); // 枚举 i 作为因数,累加到每个倍数 for (int i = 1; i <= n; i++) { for (int j = i; j <= n; j += i) { divCnt[j]++; } } // 输出每个数的因数个数 for (int i = 1; i <= n; i++) { cout << "数 " << i << " 的因数个数: " << divCnt[i] << endl; } return 0; } ``` ## 🧠 算法说明 - 外层循环 `i` 从 1 到 n,内层循环枚举 `i` 的所有倍数。 - 每个数 `j` 会被其所有因数 `i` 更新一次,因此 `divCnt[j]` 最终等于 `j` 的因数总个数。 - 时间复杂度 O(n log n),空间复杂度 O(n)。 ## ⏱️ 优化变体(若需处理大范围) 若 n 很大(如 10^7),可用线性筛法求每个数的最小质因数,再结合质因数分解计算因数个数。 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> spf(n + 1, 0); // 最小质因子 vector<int> primes; // 线性筛构建最小质因子 for (int i = 2; i <= n; i++) { if (spf[i] == 0) { spf[i] = i; primes.push_back(i); } for (int p : primes) { if (p > spf[i] || i * p > n) break; spf[i * p] = p; } } vector<int> divCnt(n + 1, 1); for (int i = 2; i <= n; i++) { int x = i; int cnt = 1; // 分解质因数并计算因数个数 while (x > 1) { int p = spf[x]; int exp = 0; while (x % p == 0) { x /= p; exp++; } cnt *= (exp + 1); } divCnt[i] = cnt; } for (int i = 1; i <= n; i++) { cout << i << ": " << divCnt[i] << endl; } return 0; } ``` ## 📌 注意事项 - 若题目要求区间查询(如 [L, R]),可以先预处理前缀和或直接查询时计算。 - 注意数据范围,避免使用递归或过深循环导致超时。 - 如果 P3772 具体描述不同(如询问单个数的因数个数),请提供完整题目内容以便调整代码。 ######[AI问答 | 800点数解答 | 2026-08-23 18:54:22]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)565
- 巧用筛法!计算 N 到 M 间数的最大质因数个数(DeepSeek | 245点数解答 | 2026-01-18 12:43:51)99
- C++实现滑动窗口最大值问题及开发建议(字节豆包 | 946点数解答 | 2026-08-15 16:07:43)12
- 使用C++解决滑动窗口最大值查找问题的实现与优化(字节豆包 | 555点数解答 | 2026-08-15 16:08:05)12
- C++实现滑动窗口最大值输出的解决方案及开发建议(字节豆包 | 718点数解答 | 2026-08-15 16:10:19)13
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)444
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)397
- 精准优化:明确需求,开启高效提升之旅! (字节豆包 | 52点数解答 | 2026-02-09 16:44:46)165
- 代码再升级:优化版“获取dump”代码,多机制保障数据读取与保存(字节豆包 | 734点数解答 | 2026-02-10 01:23:31)161
- 代码深度优化:全面检查异常、灵活读取内存,提升可读性与可维护性(字节豆包 | 959点数解答 | 2026-02-10 01:24:14)134
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)479
- C++ 实现游戏赢家判断:巧妙找出满足和条件的最大数 (DeepSeek | 506点数解答 | 2025-06-20 16:18:09)189