C/C++求完数,小提醒

通常求完数无非就是使用循环,思路清晰。但是在这里只是想提醒各位一下,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;
}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值