【C语言训练】亲密数

Python015

【C语言训练】亲密数,第1张

亲密数对:两正整数a、b,若a的所有包含1但不包含自身的因子和等于b,b的所有包含1但不包含自身的因子和又等于a,则称a、b为一对亲密数或一亲密数对。

具体代码如下:

#include

<stdio.h>

int

fun(int

n)

{

int

i,sum

sum=1

for(i=2i<=n/2i++)

if

(n%i==0)

sum+=i

return

sum

}

void

main()

{

int

a,b,c

for

(a=2a<=1000a++)

{

b=fun(a)

c=fun(b)

if

(c==a)

printf("%5d%5d\n",a,b)

}

}

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

用除号是不行的,呵呵。

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

求因子和的函数如下:

int sumf(int num)

{

    int i,sum = 0

    for(i = 1i <= 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 = 2i < num i ++)

    {

         if(num % i == 0)

         {

              sum += i 

         }   

    }

    return sum

}