完全数: 是指一个数恰好等于它的所有因子之和
比如:6=1+2+3
28=1+2+4+7+14
#include<iostream>
using namespace std;
int perfect(int n) //定义求完全数的函数
{
int i, s = 1;
for (i = 2; i <= n / 2; i++) // i< n / 2如果一个数的一半都没有找到除余为0的,那么这个数必然不是完全数。
if (n % i == 0) s = s + i;
if (s == n) return 1;
else return 0;
}
int main()
{
int n;
for (n = 2; n <= 1000; n++)
if (perfect(n))
cout << n << endl;
}
代码里面数字的理解:
一个数的一半,就是这个数除以2,如果一个数的一半都没有找到除余为0的,那么这个数必然不是完全数。(可以自己除一下去验证)
非0即为真,也就是他返回一个值在main函数中的if语句中进行判断,如果是1那么返回就是完全数,否则就不是。
为什么n和i从2开始呢?因为任何数除1求出的余数都是0,所以只能从2开始。n从2开始因为1不是完全数,所以也只能从2开始。