求助:通过编程在6——5000内找出所有的亲密对数,若a与b是亲密数则a的因子和等于b,b的因子和等于a,

如220和284,我调试的时候对了,但是运行不出来,程序如下:#include<stdio.h>main(){inta,i,j,sum1,sum2;sum1=0;sum2... 如220和284,我调试的时候对了,但是运行不出来,程序如下:
#include<stdio.h>
main()
{
int a,i,j,sum1,sum2;
sum1=0;sum2=0;
for(a=6;a<=5000;a++)
{
for(i=1;i<=a/2;i++)
{

if(a%i==0)
sum1+=i;
}
if(sum1>=6&&sum1<=5000&&sum1!=a )
{
for(j=1;j<=sum1/2;j++)
{

if(sum1%j==0)
sum2+=j;
}
}
if(sum2==a)
{
printf("a=%d b=%d\n",a,sum1);
}
}
}
展开
 我来答
ZM_Alien
2014-03-29 · TA获得超过599个赞
知道小有建树答主
回答量:375
采纳率:100%
帮助的人:395万
展开全部

对于数a,因子里包含1和a么?

 

你这个实现感觉复杂了,计算有点重复,没怎么看懂。

 

你参考一下这个还没优化过的算法

int main()
{
   int a,i,j,sum1,sum2;
   int msum[5000];
   float sqrtbon;
   sum1=0;sum2=0;
   msum[0]=1;
   msum[1]=3;
   for(a=3;a<=5000;a++)
   {  msum[a-1]=0;
      sqrtbon=sqrt((float)a);
      for(i=1;i<=sqrtbon;i++)
      { if(a%i==0)
        if(a/i!=i)
         msum[a-1]+=i+a/i;
        else
         msum[a-1]+=i;
      }
   }
 
   for(i=0;i<5000;i++)
   { for(j=i+1;j<5000;j++)
      { if(msum[i]==msum[j])
       { printf("%d and %d are one pair\n",i+1,j+1);
       }
      }
   }
}
追问
包括1但不包括本身
追答
int main()
{
   int a,i,j,sum1,sum2;
   int msum[5000];
   float sqrtbon;
   sum1=0;sum2=0;
   msum[0]=1;
   msum[1]=1;
   for(a=3;a<=5000;a++)
   {  msum[a-1]=1;
      sqrtbon=sqrt((float)a);
      for(i=2;i<=sqrtbon;i++)
      { if(a%i==0)
        if(a/i!=i)
         msum[a-1]+=i+a/i;
        else
         msum[a-1]+=i;
      }
   }
   for(a=220;a!=5000;a++)
   { if(msum[a-1]!=1 && msum[a-1]<5000 && a!=msum[a-1] &&a==msum[msum[a-1]-1])
  { printf("%d and %d are one pair\n",a,msum[a-1]);
   msum[a-1]=1;
  }
   }
}
匿名用户
2014-03-29
展开全部
哇,这是什么啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ac3169oAA
2014-03-29
知道答主
回答量:83
采纳率:0%
帮助的人:14.9万
展开全部
哇!这是什么呀◎﹏◎
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式