1. 完数概念与数学背景
完数(Perfect number)在数学上又称完美数或完备数,是指一个正整数等于它的真因子(即除了自身以外的约数)之和。最早的完数研究可以追溯到公元前6世纪的古希腊数学家毕达哥拉斯,欧几里得在《几何原本》中首次系统研究了完数的性质。
在C++编程中实现完数判断,我们需要先理解其数学定义。例如:
- 6的真因子为1、2、3,且1+2+3=6
- 28的真因子为1、2、4、7、14,且1+2+4+7+14=28
目前已知的完数都是偶数,且与梅森素数有直接关联——欧几里得证明当2^p-1是素数时,2^(p-1)*(2^p-1)必定是完数。这种关联性为我们后续的算法优化提供了理论基础。
注意:现代数学尚未发现奇完数,但也没有证明奇完数不存在。在编程实现时我们只需考虑偶数情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础实现方案
2.1 暴力枚举法
最直观的实现方式是遍历所有可能的因子并求和:
cpp复制#include <iostream>
#include <vector>
using namespace std;
bool isPerfectNumber(int num) {
if (num <= 1) return false;
int sum = 1; // 1是所有大于1的数的真因子
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0) {
sum += i;
if (i != num / i) { // 避免重复添加平方数
sum += num / i;
}
}
}
return sum == num;
}
int main() {
for (int i = 2; i <= 10000; ++i) {
if (isPerfectNumber(i)) {
cout << i << " is a perfect number." << endl;
}
}
return 0;
}
这个基础版本的时
