完全数、亲和数

参加了一个笔试,回来想敲一下代码,这就来了。

选择题错了好多,填空题也错了,o(︶︿︶)o 唉,又要悲剧了。

该公司没有说明不让泄漏题目,所以偶就贴一下咯~

 题目:如果两个整数a和b,a的所有真因子(即除了自身以外的约数)之和等于b,b的所有真因子只之等于a,且a!=b,则称a和b是一对亲和数。

如220的所有真约数之和为:1+2+4+5+10+11+20+22+44+55+110=284,而284的所有真约数之和为:1+2+4+71+142=220.

如果a=b,则称a为完全数,又称完美数或完备数,它的所有真因数之和恰好等于自身。

例如:第一个完全数是6,它有约数1,2,3,6,除过自身之外,其余3个数相加=6.

已发现的完全数都是偶数。

 找出1~10000内的所有完全数。然后逐一验证每隔完全数是否为偶数。

列出1~10000内的所有亲和数,对于(220,284)和(284,220),我们认为是同一个亲和数对,只列出前项比后项小的(220,284)。

 下面给出偶填的代码:

#include <stdio.h>
int finOddPerfectNum(int low,int high)
{
    int perfectNum=0;
    int oddPerfectNum=0;
    printf("该范围内,有完全数:\n");
    int i;
    for(i=low;i<=high;i++)
    {
        if( plusFactor(i)== i)//(2)填的
        {
            printf("%d\n",i);
            perfectNum++;//(3)写的
            if(i%2!=0)
            {
                oddPerfectNum++;
            }
        }
    }
    printf("该范围内,有完全数共 %d 个\n",perfectNum);
    return oddPerfectNum;
}
int plusFactor(int a)
{
    int s=0;
    int i;
    for(i=1;i<=a/2;i++)
    {
        if(a%i==0)//(5)填的
            s=s+i;
    }
    return s;
}

int fineAmicableNum(int low,int high)
{
    int amicableNum=0;
    printf("该范围内,有亲和数:\n");
    int i;
    for(i=low;i<=high;i++)
    {
        int j=plusFactor(i);
        if(j!=i)//(4)填的
        {
            if(i<j)
            {
                printf("%d and %d \n",i,j);
                amicableNum++;
            }
        }
    }
    return amicableNum;
}

int main() 
{
    int oddPerfectNum=0;
    oddPerfectNum=finOddPerfectNum(1,300);//修改这里的范围,找完全数!!
    if(oddPerfectNum>=1)//(1)填的
    {
        printf("该范围内,有奇完全数 %d 个 \n",oddPerfectNum);
    }
    else
    {
        printf("该范围内,没有奇完全数\n");
    }
    int amicableNum=0;
    amicableNum=fineAmicableNum(1,300);//修改这里的范围,找亲和数!!
    printf("该范围内,有亲和数 %d 对。 \n",amicableNum);
    return 0;
}

运行结果(为了方便粘贴结果,只给了1~300范围运行的部分结果): 

该范围内,有完全数:
6
28
该范围内,有完全数共 2 个
该范围内,没有奇完全数
该范围内,有亲和数:
12 and 16
18 and 21
……太多了
104 and 106
108 and 172
112 and 136
……太多了
216 and 384
220 and 284
……太多了
300 and 568
该范围内,有亲和数 69 对。


只可惜考试结束一小时后,在电脑上调出来了,没在纸上当时写出。

 不早了,睡。安~微笑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值