北航计算机机试15相亲数

北航11年孪生数

你会发现这两个惊人的相似,对!历史就是这么惊人的相似哈哈哈

【题意】
如果对于两个大于 1 的正整数 x 和 y,x 除了本身以外的因子之和等于 y,y 除了本身以外的
因子之和等于 x,则称 x 和 y 是一对相亲数。比如 220 除了本身以外的因子之和 110+55+44+22+20+11+10+5+4+2+1=284,而 284 除了
本身以外的因子之和 142+71+4+2+1=220,则 220 和 284 就是一对相亲数。
请你编写一个程序计算 x 和 y 分别除了本身以外的因子之和,并判断 x 和 y 是不是一对相亲数。x 和 y 为大于 1 的 int 范围内的整数。
【输入】
x 和 y,空格隔开。
【输出】
第一行输出 x,一个逗号,x 的除了本身以外的因子之和的计算过程(见题意,要求降序输出每个因子),不要有多余的空格。
第二行输出 y,一个逗号,y 的除了本身以外的因子之和的计算过程(见题意,要求降序输出每个因子),不要有多余的空格。
第三行,如果 x 和 y 是一对相亲数输出 1,否则输出 0。文末换行可有可无。
【样例 1】
标准输入
220 284
标准输出
220,110+55+44+22+20+11+10+5+4+2+1=284
284,142+71+4+2+1=220
1
【样例 2】
标准输入
84 1120
标准输出
11849296+148+74+37+32+16+4+2+1=1210
1220,560+280+224+160+140+112+80+70+56+40+35+32+28+20

#include<stdio.h>
int main()
{
    int m,n;
    int i;

    while(scanf("%d%d",&m,&n)!=EOF)
    {
        int m_sum=0;
        int n_sum=0;
        printf("%d,",m);
        for(i=m/2;i>1;i--)
        {
            if(m%i==0) 
            {
                printf("%d+",i); m_sum+=i;
            }
        }
        printf("1=%d\n",m_sum+1);
        printf("%d,",n);
        for(i=n/2;i>1;i--)
        {
            if(n%i==0) 
            {
                printf("%d+",i); n_sum+=i;
            }
        }
        printf("1=%d\n",n_sum+1);
        if(m_sum+1==n && n_sum+1 ==m)
        {
            printf("1\n");
        }else{ printf("0\n");}
    }
    return 0;
}


思路:和孪生数相反,从大到小输出,其他都一样。。。注意输出格式

全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务