酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

完全数查找的C++实现与优化解析

我来帮你编写一个寻找完全数的C++程序。 ## 🎯 问题分析 完全数是指一个数所有真因子(除了自身以外的因子)之和等于它本身。我们需要找出2到n之间所有这样的数。 ## 💡 解决方案 ```cpp #include <iostream> #include <cmath> using namespace std; // 判断一个数是否为完全数 bool isPerfect(int num) { int sum = 1; // 1是所有大于1的数的因子 int sqrtNum = sqrt(num); // 从2到sqrt(num)寻找因子 for (int i = 2; i <= sqrtNum; i++) { if (num % i == 0) { sum += i; // 如果i和num/i不相等,加上另一个因子 if (i != num / i) { sum += num / i; } } } // 如果是大于1的数,需要加上1 return num > 1 && sum == num; } int main() { int n; cin >> n; // 从2到n遍历 for (int i = 2; i <= n; i++) { if (isPerfect(i)) { cout << i << endl; } } return 0; } ``` ## 🔍 代码说明 1. **isPerfect函数**:判断一个数是否为完全数 - 初始化sum为1(因为1是所有数的因子) - 从2遍历到sqrt(num),优化因子查找效率 - 找到因子时,同时考虑成对的因子 2. **main函数**: - 读取输入n - 从2到n遍历每个数 - 对每个数调用isPerfect函数判断 - 输出所有完全数 ## ⚡ 优化要点 - 使用平方根优化,减少循环次数 - 时间复杂度为O(n√n),对于n≤10000的数据范围完全可行 - 内存占用小,只使用基本变量 ## ✅ 验证示例 - 输入7:输出6(2到7之间只有6是完全数) - 输入30:输出6和28(2到30之间的完全数) ######[AI问答 | 501点数解答 | 2026-07-19 12:53:30]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]