现代风格建筑实景图:关于C语言的完全数的编程?

来源:百度文库 编辑:神马品牌网 时间:2024/04/25 00:44:30
我上机考试C语言,老师让编完全数,有谁会啊?帮帮忙

顶一楼!
#include <stdio.h>

void main()
{
int a,s,k;
int n=0;
printf("(2,10000)中的完全数:\n");
for(a=2;a<=10000;a++){
s=1;
for(k=2;k<=a/2;k++)
if(!(a%k)) s+=k;
if(s!=a)continue;
n++;
printf("%d:%d=1",n,a);
for(k=2;k<=a/2;k++)
if(!(a%k))printf("+%d",k);
printf("\n");

}
}

完全数
正整数n的所有小于n的不同正因数之和若等于n本身,称数n为完全数。
例如,6的正因数为1,2,3,而6=1=2+3,则6是一个完全数。
试求指定区域内的完全数。
1、算法分析
对指定区域中的每一个数A实施穷举判别。根据完全数的定义,为了判别正数A是不是完全数,用试商法找出A的所有小于A的因数K。显然,1<=K<=A/2。注意到1是任何整数的因数,先把因数1确定下来,即因数和S赋初值1,然后设置K从2到A/2的循环,由表达式A/K判别K是否是A的因数,并求出A的因数累加和S。最后若满足条件A=S说明A是完全数,作打印输出。把n的因数从1开始,由小到大排列,写成和式。
程序代码如下:
#include
void main()
{
int a,s,k;
int n=0;
printf("(2,10000)中的完全数: ");
for(a=2;a<=10000;a++)
{
s=1;
for(k=2;k<=a/2;k++)
if((float)a/k==a/k) s=s+k;
if(s!=a)goto A;
n=n+1;
printf("%d:%d=1",n,a);
for(k=2;k<=a/2;k++)
if((float)a/k==a/k)printf("+ %d",k);
printf("\n");
A:;
}
}

算法不错

可以!