编程找出1000以内的所有完全数,并输出使该数成为完全数的因子。(c语言)

如题所述

完数是大于等于1、小于自身的所有因子之和与自身相等的数。先求因子之和,再与其比较,相等时再由小到大求各因子依次输出,并在之间用'+'连接起来。举例代码如下:

#include "stdio.h"
int main(int argc,char *argv[]){
int n,m,i,t;
for(n=6;n<=1000;n+=2){
for(m=1,t=n>>1,i=2;i<=t;i++)//求所有因子之和
if(n%i==0)
m+=i;
if(m==n){//因子和与自身比较是否相等
printf("%4d = 1",n);
for(i=2;i<=t;i++)//若相等则再求因子并输出
if(n%i==0)
printf("+%d",i);
printf("\n");
}
}
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-10
c和c++和c#很接近,起码算法对任何语言都一样道理http://zhidao.baidu.com/open/question/detail?appid=10002&qid=c33e3f482326ddea15cbb5d9把循环改为FOR,作参考用
第2个回答  2014-04-10
for(int n;n<=1000;n++)
{
for(){求出所有公约数,并相加}
if(相等)
for(){输出所有公约数}

}
第3个回答  2014-04-10
#include<stdio.h>
#include<string.h>
#define MAXN 512
int num[MAXN];
main()
{
int i,j,total_size=0,len_num=0;
for(i=2; i<=1000; i++)
{
len_num=0;
total_size=0;
memset(num,0,sizeof(num));//避免不必要的结果 将i初始化为2
for(j=1; j<i; j++)
{
if(i%j==0)
{
num[len_num++]=j;
total_size+=j;
}
}

if(total_size==i)
{
printf("%d\n",i);
for(j=0; num[j]!=0; j++)
printf("%d ",num[j]);
printf("\n");
}
}

exit(0);
}
相似回答