目录:
- 什么是完数
- 判断一个完数
- 求范围内完数
一、什么是完数
定义:完全数
(完数
)Perfect number
如果一个数恰好等于它的因子之和,则称该数为“完全数”。
第一个完全数是
6=1+2+3
第二个完全数是
28=1+2+4+7+14
第三个完全数是
496=1+2+4+8+16+31+62+124+248
后面还有:8128、33550336………
二、判断一个完数
程序…………………………
#include<stdio.h>
int main()
{
int n,i,sum=0;
printf("请输入一个正整数:");
scanf("%d",&n);
for(i=1;i<n;i++)
{
if(n%i==0)
sum=sum+i; //因子累加
}
if(sum==n)
printf("%d是一个完数\n",n);
else
printf("%d不是一个完数\n",n);
return 0;
}
运行结果……………………
三、求范围内完数
问题:
一个数如果恰好等于它的因子之和
,这个数就称为“完数”。例如,6的因子为1,2,3,而 6=1+2+3
,因此6是完数。输出1000之内所有完数……
程序1…………………………
#include<stdio.h>
int main()
{
int n,i,sum;
printf("输出1000以内所有的“完数”:\n\n");
for(n=2;n<1000;n++) //从2开始判断
{
sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
sum+=i; //因子累加
}
if(sum==n)
printf("%d 是一个完数\n",n);
}
return 0;
}
运行结果…………………………
程序2…………………………
//一个数如果恰好等于它的因子之和,这个数就称为“完数”。
//例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。
#include<stdio.h>
int main()
{
int n,s,i;
printf("输出1000以内所有的“完数”:\n\n");
for(n=2;n<1000;n++)
{
s=0;
for(i=1;i<n;i++)
if((n%i)==0) s=s+i;
if(s==n)
{
printf("%d its factors are ",n); //它的因子
for(i=1;i<n;i++)
if(n%i==0)
printf("%d ",i);
printf("\n");
}
}
return 0;
}
运行结果…………………………
用中文输出:
其它:
1.水仙花数(输出全部水仙花数)
2.素数(判断,统计,范围输出)
3.判断闰年的3种方法(判断+范围输出)
4.C语言与计算机语言(内含Hello world!详解)
常见一些概念:
质数 :一个数的因数只有 1 和 它本身(又称素数
)
合数 :一个数除 1 和 它本身 外,还有其它的因数。
真因子:包括1但不包括这个数本身的约数(又称真因数)
真约数:除了自身以外的约数
例如:6的约数(因子)有1、2、3、6,真因子是1、2、3。
最后再来看前面完数的定义
完数:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
你有没有发现,在许多对完数定义或问题中常常说:完数=因子之和,但因子还包括它本身,不应该是 完数=真因子之和吗 ??
当然,在详细介绍时:完数是它所有的真因子之和
我不知道这是为什么???
是我理解错了,还是这种表示是用习惯了吧!!!
还是其他原因:
如果你知道,请留言,谢谢!!