用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位数。
