OJ求1000以内的完数

首先题目说明了什么样的数为完数,这个数的因子之和加起来为这个数。

这里就是一个条件判断这个数的因子,并将这些因子输出---注意1是每个数都有的固定因子,这个因子也是要用到循环所以要考虑1-开始值为多少经刚刚的分析1是固有的那就要从2开始,2-结束条件为可以看到给的样例中输出的都是小于等于二分之这个数,3-factor++;

还有一个条件,这个数的因子数之和等于这个数,这个数用i表示,常规循环,这里要定义一个变量sum,注意这里sum初始值为1,因为有个固定因子1,在判断完所有的因子后,sum=sum+factor;将因子数之和储存在sum中,若sum==i则就输出i

代码如下

#include<stdio.h>
int main()
{
    int i, factor, sum;
    for (i = 2; i <= 1000; i++)
    {
        sum = 1;
        for (factor = 2; factor <= i / 2; factor++)
        {
            if (i % factor == 0)
            {
                sum = sum + factor;
            }
        }
        if (sum == i)
        {
            printf("%d its factors 1", i);
            for (factor = 2; factor <= i / 2; factor++)
            {
                if (i % factor == 0)
                {
                    printf(" %d", factor);
                }
            }
            printf("\n");
        }
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值