通常求完数无非就是使用循环,思路清晰。但是在这里只是想提醒各位一下,is_PerfectNum (判断是否是完数的函数)的循环,没必要循环到该数为止,道理很明显,如果 10/2=5 ,那么 6还可能是它的因子吗?其实在好多循环里面都可以用到这一点。这样可以提高大部分效率。。注意这一点的同学请忽略此文。。。
// Perfectnumber.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
int _tmain(int argc, _TCHAR* argv[])
{
bool is_PerfectNum(int arg);
int count=0;
for (int i = 2; i < 10000;i++)
{
if (is_PerfectNum(i))
{
count++;
}
}
printf("\n10000以内共以上 %d 个完数\n", count);
system("pause");
return 0;
}
bool is_PerfectNum(int num)
{
int count = 0;
int div2 = num / 2 ;
for (int x = 1; x <= div2; x++) // 没必要循环到 num 才停止
{
if (!(num%x))
{
count += x;
}
}
if (count==num)
{
printf("%d\t ", count);
return true;
}
else return false;
}