用C语言打印“完数”

如题所述

完数,即完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。

根据该定义 可以得出判断完数的函数如下:

#include <stdio.h>
int is_perfect_number(int n)
{
    int i,s=0;
    for(i = 1; i <=n/2; i ++)
        if(n%i == 0) s+= i;//统计所有真因子的和。
    if(s == n) return 1;//如果与原值相等,则该数为完数。
    
    return 0;//不是完数。
}

根据该函数,只需要对需要打印的范围内所有数做遍历,并逐一调用该函数判断,如果返回1则打印即可。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-05
// 本程序演示一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数
#include"stdio.h"
main()
{
int i,j,s,sum;
printf("完数:\n") ;
sum=0;
for(i=2;i<=1000;i++)
{ s=0; ;//此处s=0一定要加,因为前几次循环的时候s的值已经改变 。清零
for(j=1;j<i;j++)
{
if(i%j==0)//这一块是如果能够整除,那么就是该数的因子,我们累加起来

{s+=j;
}
}
if(s==i) //因子的和与原数比较,如果正确就输出
{printf("%d\n",i);
sum++;
}
}
printf("完数的个数:%d\n",sum);
}
第2个回答  推荐于2016-07-15
以前写的。
/*一个数恰好等于它的因子之和.6=1+2+3*/
#include <stdio.h> /*头文件*/
#define N 1000 /*搜索范围在1000以内*/

int main(int argc, char *argv[]) /*主函数*/
{
int i; /*循环变量*/

for(i=1;i<=N;i++) /*循环找出小于N的所有完数并输出其因子.*/
{
if(wanshu(i)) print_factor(i);
continue;
}
return 0;
} /*主函数结束*/

int wanshu(int x) /*判断x是否完数*/
{
int i,sum=0;
// int factor[N]={0};

for(i=1;i<=x;i++) /*对所有x的因子求和*/
{
if(x%i==0) sum=sum+i;
continue;
}

if(sum==x*2) return(1); /*如果求和结果等于2x则x是完数*/
else return(0); /*否则不是完数*/
} /*完数判断函数结束*/

int print_factor(int x) /*打印结果*/
{
int i,j,res[1000]={0}; /*i,j为循环变量.res数组记录每个因子.*/

for(i=1;i<x;i++) /*将每个非零因子存在数组res[]中*/
{
if(x%i==0) res[i]=i;
continue;
}

printf("%d its factors are: ",x); /*打印提示*/

for(j=0;j<x;j++) /*打印每个因子,以逗号相隔.*/
{
if(res[j]!=0)
{
printf("%d",res[j]);
printf("\,");
}
}
printf("\n");

return(0);
} /*打印函数结束*/本回答被提问者采纳
第3个回答  2019-10-30
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
bool wanquan[5001];
void is_perfect_number()
{
    int i,s=0;
    for(int j = 1; j<=5000; j++){
    for(i = 1; i <=j/2; i ++){
    if(j%i == 0) 
s+=i;}//统计所有真因子的和。
    if(s == j) wanquan[j]=1;//如果与原值相等,则该数为完数。
  s=0;
}
/* for (i=1;i<=5001;i++)
cout<<wanquan[i]<<endl<<endl;*/
}

完全数打表哈~~~

第4个回答  2007-01-13
没有优化。
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
int count,factor[1000];
int Factor(int n) // 因子之和
{
int i,sum = 1,nn = n;
count = 0;
for (i = 2; i < n; i ++)
{
if (n % i == 0)
{
sum += i;
factor[count ++] = i;
}
}
return sum;
}

int main()
{
int i;
printf("1000内的完数有\n");
printf("1\n");
for (i = 6; i <= 1000; i ++)
{
if (Factor(i) == i)
{
printf("%d\n",i);
}
}
return 0;
}
相似回答