C++正整数因数求和算法详解及优化实现
## 🔍 因数求和算法解析 对于正整数 n,因数是能整除 n 的所有正整数。求和即可得出结果。 ### 💡 核心思路 遍历从 1 到 n 的每个整数,检查是否能整除 n。若能整除,则累加到总和。 ### ⚙️ 时间复杂度 朴素遍历 O(n) 在 n 较大时性能不佳。优化方案:遍历到 √n,每次发现因数 i 时同时累加 i 和 n/i。 ### 🧩 C++ 实现(朴素版) ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; for (int i = 1; i <= n; ++i) { if (n % i == 0) sum += i; } cout << sum << endl; return 0; } ``` ### 🚀 优化版(√n 遍历) ```cpp #include <iostream> #include <cmath> using namespace std; int main() { int n; cin >> n; int sum = 0; for (int i = 1; i * i <= n; ++i) { if (n % i == 0) { sum += i; if (i != n / i) sum += n / i; } } cout << sum << endl; return 0; } ``` ### 📊 样例验证 输入 4: - 朴素版:i=1,2,4 → 1+2+4=7 - 优化版:i=1 → 累加1和4;i=2 → 累加2(2≠2,不重复加)→ 7 ### 🧮 边界考虑 - n 为 1 时,因数和为 1 - 使用 int 时注意 n 最大为 2^31-1,但因数个数较多时和可能溢出,可改用 long long ### 🎯 复杂度对比 | 版本 | 时间复杂度 | 适用场景 | |------|------------|----------| | 朴素版 | O(n) | n ≤ 10^7 | | 优化版 | O(√n) | n ≤ 10^14 | ######[AI问答 | 516点数解答 | 2026-08-15 23:46:59]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)561
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)347
- 巧用筛法!计算 N 到 M 间数的最大质因数个数(DeepSeek | 245点数解答 | 2026-01-18 12:43:51)97
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)439
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)394
- 精准优化:明确需求,开启高效提升之旅! (字节豆包 | 52点数解答 | 2026-02-09 16:44:46)163
- 代码再升级:优化版“获取dump”代码,多机制保障数据读取与保存(字节豆包 | 734点数解答 | 2026-02-10 01:23:31)157
- 代码深度优化:全面检查异常、灵活读取内存,提升可读性与可维护性(字节豆包 | 959点数解答 | 2026-02-10 01:24:14)131
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)477
- C++ 实现查找指定数字在正整数序列中的位置(字节豆包 | 398点数解答 | 2026-04-11 13:08:06)99
- C++ 实现统计指定数字在数组中出现的次数(字节豆包 | 377点数解答 | 2026-04-11 13:09:11)82
- Python切片操作巧解经典算法:二维数组90°旋转(阿里通义 | 205点数解答 | 2023-10-31 11:05:29)399