用C语言实现判断一个数是否为完美数

完美数的概念: 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。
思路1: 我们找到所输入的数字X的所有真因子然后在将所有因子加起来与原先所输入的值进行比较,相等则为完美数,否则不是。
代码:

int  checkPerfectNumber(int num)
{
	int i = 0;
	int sum = 0;
	for (i = 1; i < num; i++)
	{
		if (num % i == 0)
		{
			sum += i;
		}
		if (sum > num)
		{
			break;
		}
	}
	if (sum == num)
	{
		return 1;
	}
	return 0;
}

分析: 但是如果你所输入的值过大,循环次数就会过大
思路2: 大数学家欧拉曾推算出完全数的获得公式:如果一个数p 为质数且 (2^p )- 1也为质数,那么((2 ^ p) - 1) * (2 ^ (p-1))为完全数。
例如:
2 为 质数 ;(2 ^ 2) - 1 = 3 也为质数;则 ((2 ^ 2)- 1) * (2 ^ (2-1)) = 6
6为完全数:6 = 1+2+3
3为质数;(2^3)-1 =7 也为质数;则((2 ^ 3)-1)* (2 ^( 3 -1))=28
28为完全数:28=1+2+4+7+14
代码:

int Prime(int num)
{
	int i = 0;
	for (i = 2; i < sqrt(num); i++)
	{
		if (num % i == 0 )
		{
			return 0;
		}
	}
	return 1;
}
int  checkPerfectNumber(int num){
	int i = 0;
	int sum = 0;
	for (i = 2; i <= 13; i++)
	{
		if (Prime(i) == 1 && Prime(pow(2, i)- 1) == 1)
		{
			sum = (pow(2, i) - 1) * pow(2, i - 1);
			if (sum == num)
			{
				return 1;
			}
		}
	}
	return 0;
}

分析: 我们首先要写一个判断素数的函数(Prime),来进行判断素数。然后判断完美数的函数的最大值为10位数。

你可能感兴趣的:(用C语言实现判断一个数是否为完美数)