c语言 求出亲密数对

//43、求2~1000中的所有亲密数对(亲密数对是指:如果a的因子和等于b,b的因子和等于a,则(a,b)就是亲密数对)#include<stdio.h>voidmai... //43、求2~1000中的所有亲密数对(亲密数对是指:如果a的因子和等于b,b的因子和等于a,则(a,b)就是亲密数对)
#include <stdio.h>
void main()
{
int i,j,k,l,m,g,q,w;
int a[100],b[100];
int x,y;

for(i=2;i<1000;i++) //取a的值
{
x=0;y=0;m=0;g=0;
for(j=i+1;j<=1000;j++) //取b的值
{
for(k=1;k<i;k++)
if(i/k==0)
a[m++]=k; //找出a的因子
for(l=1;l<=j;l++)
if(j/l==0)
b[g++]=l; //找出b的因子
for(q=0;q<m;q++)
x+=a[q]; //a的因子之和
for(w=0;w<g;w++)
y+=b[w]; //b的因子之和
if(x==y)
printf("%d,%d\n",i,j);

}
}

}

输出结果乱七八糟 而且一直循环
展开
 我来答
hdparrot
推荐于2017-11-26 · TA获得超过2404个赞
知道小有建树答主
回答量:1385
采纳率:0%
帮助的人:1149万
展开全部

大概看了一下,你判断是否为因子的地方有问题,应该用取余运算符号:%

除号是不行的,呵呵。

另外,你把求一个数的因子和,写成一个函数,这样的话,程序看起来更明了,你也不容易混乱。

求因子和的函数如下:

int sumf(int num)
{
    int i,sum = 0;
    for(i = 1;i <= num; i ++)
    {
         if(num % i == 0)
         {
              sum += i; 
         }   
    }
    return sum;
}

不过你所说的因子是否包含了1和数本身?如果包含的话,我运行了一下,2到1000好像没发现有满足条件的。


如果不包含1和本身,倒是有几个,全程序是这样:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{   int i; 
    for(i = 2; i < 1000; i++)
    {      
        //printf("%d--%d--%d\n",i,sumf(i),sumf(sumf(i)));
        if(i == sumf(sumf(i)))
        {
           printf("%d    %d\n",i,sumf(i));
        }    
    } 
    system("pause");
    return 0;
}

int sumf(int num)
{
    int i,sum = 0;
    for(i = 2;i < num; i ++)
    {
         if(num % i == 0)
         {
              sum += i; 
         }   
    }
    return sum;
}
匿名用户
2015-03-13
展开全部
#include<stdio.h>
void main()
{
int i,j,q,s1,s2;
for(i=1;i<=1000;i++)
{
s1=0;
s2=0;
for(j=1;j<=1000;j++)
{
for(q=1;q<=500;q++)
{
if(i%q==0&&i!=q)
s1=s1+q;
if(j%q==0&&j!=q)
s2=s2+q;
}
if(s1==j&&s2==i&&i!=j)
printf("%d,%d\n",i,j);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式