C 语言求亲密数 编译结果错误

源来缘爱 发布于 2013/08/31 00:23
阅读 322
收藏 0

如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

下面是我自己编写的代码:

#include<stdio.h>
int main()
{
	int i,a,sum1 = 0,sum2 = 0;
	for(i =1;i <= 3000;i++)
	{
		for(a = 1;a <= i/2;a++)
		{
			if(!(i % a))
				sum1 += a;
		}
		for(a = 1;a <= sum1/2;a++)
		{
			if(!(sum1 % a))
				sum2 += a;
		}

		if(i == sum2 )
			printf("%4d..%4d ",i,sum2); 
	}
	return 0;
}
运行却的不到结果,请问这是为什么?求指点。
加载中
0
cgcgbcbc
cgcgbcbc

i循环每次开始时要把sum1,sum2置零吧,有没有别的问题我不晓得

0
S
Sachs_

d(n)定义为n 的所有真因子(小于 n 且能整除 n 的整数)之和。 如果 d(a) = b 并且 d(b) = a, 且 a ≠ b, 那么 a 和 b 就是一对相亲数(amicable pair),并且 a 和 b 都叫做亲和数(amicable number)。

#include <stdio.h>


static int d(int n) {
    int sum = 0;
    int i, j;

    j = n / 2;
    for (i = 1; i <= j; ++i) {
        if (n % i == 0) {
            sum += i;
        }
    }

    return sum;
}

static int is_amicable(int a) {
    int b;

    b = d(a);
    if (b == a) {
        return 0;
    } else if (d(b) == a) {
        return 1;
    }

    return 0;
}

int main(void) {
    int upper = 3000;
    int i;

    for (i = 2; i < upper; ++i) {
        if (is_amicable(i)) {
            fprintf(stdout, "d(%u) = %u\n", i, d(i));
        }
    }

    return 0;
}
S
Sachs_
回复 @_忆_ : ???
_忆_
_忆_
回复 @_忆_ : tttt
_忆_
_忆_
ffff
_忆_
_忆_
fff
0
_忆_
_忆_
ffffffffffffffffgsdgfds
0
源来缘爱
源来缘爱

引用来自“Sachs_”的答案

d(n)定义为n 的所有真因子(小于 n 且能整除 n 的整数)之和。 如果 d(a) = b 并且 d(b) = a, 且 a ≠ b, 那么 a 和 b 就是一对相亲数(amicable pair),并且 a 和 b 都叫做亲和数(amicable number)。

#include <stdio.h>


static int d(int n) {
    int sum = 0;
    int i, j;

    j = n / 2;
    for (i = 1; i <= j; ++i) {
        if (n % i == 0) {
            sum += i;
        }
    }

    return sum;
}

static int is_amicable(int a) {
    int b;

    b = d(a);
    if (b == a) {
        return 0;
    } else if (d(b) == a) {
        return 1;
    }

    return 0;
}

int main(void) {
    int upper = 3000;
    int i;

    for (i = 2; i < upper; ++i) {
        if (is_amicable(i)) {
            fprintf(stdout, "d(%u) = %u\n", i, d(i));
        }
    }

    return 0;
}
我想知道我原来的代码那里出错了,为什么得不到想要的结果?
0
S
Sachs_

引用来自“源来缘爱”的答案

引用来自“Sachs_”的答案

d(n)定义为n 的所有真因子(小于 n 且能整除 n 的整数)之和。 如果 d(a) = b 并且 d(b) = a, 且 a ≠ b, 那么 a 和 b 就是一对相亲数(amicable pair),并且 a 和 b 都叫做亲和数(amicable number)。

#include <stdio.h>


static int d(int n) {
    int sum = 0;
    int i, j;

    j = n / 2;
    for (i = 1; i <= j; ++i) {
        if (n % i == 0) {
            sum += i;
        }
    }

    return sum;
}

static int is_amicable(int a) {
    int b;

    b = d(a);
    if (b == a) {
        return 0;
    } else if (d(b) == a) {
        return 1;
    }

    return 0;
}

int main(void) {
    int upper = 3000;
    int i;

    for (i = 2; i < upper; ++i) {
        if (is_amicable(i)) {
            fprintf(stdout, "d(%u) = %u\n", i, d(i));
        }
    }

    return 0;
}
我想知道我原来的代码那里出错了,为什么得不到想要的结果?
你的sum1和sum2在每次循环的时候需要重置。
0
源来缘爱
源来缘爱

引用来自“cgcgbcbc”的答案

i循环每次开始时要把sum1,sum2置零吧,有没有别的问题我不晓得

谢谢!
0
源来缘爱
源来缘爱

引用来自“Sachs_”的答案

引用来自“源来缘爱”的答案

引用来自“Sachs_”的答案

d(n)定义为n 的所有真因子(小于 n 且能整除 n 的整数)之和。 如果 d(a) = b 并且 d(b) = a, 且 a ≠ b, 那么 a 和 b 就是一对相亲数(amicable pair),并且 a 和 b 都叫做亲和数(amicable number)。

#include <stdio.h>


static int d(int n) {
    int sum = 0;
    int i, j;

    j = n / 2;
    for (i = 1; i <= j; ++i) {
        if (n % i == 0) {
            sum += i;
        }
    }

    return sum;
}

static int is_amicable(int a) {
    int b;

    b = d(a);
    if (b == a) {
        return 0;
    } else if (d(b) == a) {
        return 1;
    }

    return 0;
}

int main(void) {
    int upper = 3000;
    int i;

    for (i = 2; i < upper; ++i) {
        if (is_amicable(i)) {
            fprintf(stdout, "d(%u) = %u\n", i, d(i));
        }
    }

    return 0;
}
我想知道我原来的代码那里出错了,为什么得不到想要的结果?
你的sum1和sum2在每次循环的时候需要重置。

重新修改了一下,请鉴别:


#include<stdio.h>
int main()
{
	int i,a,sum1,sum2;
	for(i =1;i <= 3000;i++)
	{
		for(sum1 = 0,a = 1;a <= i/2;a++)
		
			if(!(i % a))
				sum1 += a;
		
		for(sum2 = 0,a = 1;a <= sum1/2;a++)
		
			if(!(sum1 % a))
				sum2 += a;
		

		if(i == sum2 )
			printf("%4d..%4d \n",i,sum1); 
	}
	return 0;
}
并且将语句:printf("%4d..%4d \n",i,sum2);中 sum2 修改为   sum1
 但是从运行结果,比较亲密数定义,若是sun1 == i 就是相等的两个数算是亲密数吗?  感觉怪怪的。


0
S
Sachs_
d(n)定义为n 的所有真因子(小于 n 且能整除 n 的整数)之和。 如果 d(a) = b 并且 d(b) = a, 且 a ≠ b, 那么 a 和 b 就是一对相亲数(amicable pair),并且 a 和 b 都叫做亲和数(amicable number)。
返回顶部
顶部