2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系:
220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为:1+2+4+71+142=220
毕达哥拉斯吧这样的数对A,B称为相亲数:A的真因数之和为B,而B的真因数之和为A。设计程序求4位以内的相亲数。
**输出格式要求:"相亲数:%d,%d\n" "%d 的真因数之和为:%d" "+%d" "=%d\n"
程序运行示例如下:
相亲数:220,284
220 的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284
284 的真因数之和为:1+2+4+71+142=220
相亲数:1184,1210
1184 的真因数之和为:1+2+4+8+16+32+37+74+148+296+592=1210
1210 的真因数之和为:1+2+5+10+11+22+55+110+121+242+605=1184
相亲数:2620,2924
2620 的真因数之和为:1+2+4+5+10+20+131+262+524+655+1310=2924
2924 的真因数之和为:1+2+4+17+34+43+68+86+172+731+1462=2620
相亲数:5020,5564
5020 的真因数之和为:1+2+4+5+10+20+251+502+1004+1255+2510=5564
5564 的真因数之和为:1+2+4+13+26+52+107+214+428+1391+2782=5020
相亲数:6232,6368
6232 的真因数之和为:1+2+4+8+19+38+41+76+82+152+164+328+779+1558+3116=6368
6368 的真因数之和为:1+2+4+8+16+32+199+398+796+1592+3184=6232
#include <stdio.h>
int main()
{
int i=0,j=0;
int sum1 = 0,sum2=0;
int s1[1000],a=0,k;
int s2[1000],b=0;
for(i=2;i<10000;i++)
{
a=b=0;
sum1 = 0;
sum2 = 0;
for(j=1;j<i;j++)
{
if(i%j == 0)
{
sum1 += j;
s1[a++] = j;
}
}
if(sum1 < i)
continue;
for(j=1;j<sum1;j++)
{
if(sum1%j==0)
{
sum2+=j;
s2[b++] = j;
}
}
if(i!= sum1 && sum2 == i)
{
printf("亲和数:%d,%d\n",i,sum1);
printf("%d的真因数之和为:",i);
for(k=0;k<a;k++)
{
if(k!=0)
printf("+");
printf("%d",s1[k]);
}
printf("=%d\n",sum1);
printf("%d的真因数之和为:",sum1);
for(k=0;k<b;k++)
{
if(k!=0)
printf("+");
printf("%d",s2[k]);
}
printf("=%d\n",i);
}
}
return 0;
}