求1到300中的所有互满数,即是两个数除了它各自本身外的所有的因数相加的和都等于对方

本文探讨了一个寻找特定数值配对的问题,并通过优化算法实现了一个高效的解决方案。利用循环和条件判断,作者展示了如何在给定范围内查找符合条件的整数对。此过程涉及数学逻辑、循环结构和条件分支,旨在提升程序效率并解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

int hms(int a);

int main(int argc, const char * argv[])

{

    int i,j;

    for (i=1; i<300; i++)

        for (j=1; j<300; j++)

            if ((hms(i)==j)&&(hms(j)==i)&&i!=j)

            {

                printf("%d,%d\n",i,j);

            }

    

    

    return 0;

}


int hms(int a)

{

    int i;

    int s=0;

    for (i=1; i<a; i++)

    {

        if (a%i==0)

        {

            s+=i;

        }

    }

    return s;

【问题描述】 2500年前数学大师毕达哥拉斯就发现,220284数之间存在着奇妙的联系: 220的因数除了自身之因数)为:1+2+4+5+10+11+20+22+44+55+110=284,284的因数为:1+2+4+71+142=220。 毕达哥拉斯把这样的数对称为相亲数。输入个正整数(大于1并且在int的表示范围之内),分别计算它们所有因数除了自身之因数),并判断它们是否是一对相亲数。 【输入形式】 从标准输入输入个正整数,以一个空格分隔这个正整数。 【输出形式】 以输入的先后顺序分行输出:输入的正整数,后跟英文逗号",",再从1开始输出其因数相加的公式(最大的因数之后没有加号),最后输出英文等号"="因数。注意:所有输出元素间无空格。 若它们是一对相亲数,则在新的一行上输出1;若不是则在新的一行上输出0。 【样例输入1】 220 284 【样例输出1】 220,1+2+4+5+10+11+20+22+44+55+110=284 284,1+2+4+71+142=220 1 【样例输入2】 2560 3282 【样例输出2】 2560,1+2+4+5+8+10+16+20+32+40+64+80+128+160+256+320+512+640+1280=3578 3282,1+2+3+6+547+1094+1641=3294 0 【样例说明】 样例1中输入的个正整数为220284,220的因数为284,284的因数为220,所以它们是一对相亲数,最后输出1; 样例2中输入的个正整数是25603282,2560的因数为3578,3282的因数为3294,所以它们不是一对相亲数,最后输出0。用Java解决
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值