一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数

简介: 一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如6=1+2+3.编程找出1000以内的所有完数
//题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
#include<stdio.h>
#define N 1000
int main()
{
    int i,j,k,n,sum;
    int a[256];
    printf("以下是所有1000以内的完数:\n");
    for(i=2;i<=N;i++)
    {
        sum=a[0]=1;//给第一个数字为1 
        k=0;
        for(j=2;j<=(i/2);j++)
        {
            if(i%j==0)
            {
                sum+=j;//sum为质数和 ,j就是质数 
                a[++k]=j;//注意这里先++保证质数赋值给a[1]开始,把质数存储到数组中 
            }
        }
        //对于2到1000内的所有数子,只要满足这个数字等于他的质数和就执行以下语句 
        if(i==sum)
        {
            printf("%d=",i);
            for(n=0;n<=k;n++)
                printf("+%d",a[n]);
            printf("\n");
        }
    }
    return 0;
}
//
//#include<stdio.h>
//
//int main()
//{
//  int i, j, sum;      /* i表示要判断的数,j表示因子,sum表示因子之和*/ 
//
//  for (i = 2; i <= 1000; i++)
//  {
//    sum = 1;
//    for (j = 2; j <= i / 2; j++)
//      if (i%j == 0)         /* 判断i能否被j整除,能的话j即为因子  因子不包括自身 */ 
//        sum += j;
//
//    if (sum == i)    /* 判断此数是否等于因子之和 */ 
//    {
//      printf("%d=, ", i);    /* 输出该数 */ 
//
//      for (j = 2; j <= i / 2; j++)
//        if (i%j == 0)printf("%d+ ", j);    /* 输出因子 */ 
//
//      printf("\n");
//    }
//  }
//
//  return 0;
//}

测试:

1.png

相关文章
|
6月前
|
算法
给定两个数,求这两个数的最大公约数
给定两个数,求这两个数的最大公约数
|
6月前
|
Python
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
如何判断一个数是质数? 要求:编写一个Python函数,输入一个整数,输出该整数是否为质数。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。
349 1
|
6月前
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
65 0
|
算法 C语言
自守数算法
自守数算法
74 0
判断10-105之间有多少个素数,并输出所有素数。【素数又称为质数,定义为在大于1的 自然数中,除了1和它本身以外不再有其他因数的数
判断10-105之间有多少个素数,并输出所有素数。【素数又称为质数,定义为在大于1的 自然数中,除了1和它本身以外不再有其他因数的数
102 0
|
索引
三个数的最大乘积
三个数的最大乘积
68 0
#一个数如果恰好等于它的真因子之和,这个数就是“完数”。例如:6的真因子是1,2,3,而6=1+2+3,因此6是完数。编程找出1000之内的所有完数。
#一个数如果恰好等于它的真因子之和,这个数就是“完数”。例如:6的真因子是1,2,3,而6=1+2+3,因此6是完数。编程找出1000之内的所有完数。
252 0
|
机器学习/深度学习
欧拉函数:求小于等于n且与n互质的数的个数
求小于等于n且与n互质的数的个数 互质穷举法 互质:两个数互质代表两者最大公约数为1 最大公约数求法:辗转相除法,最小公倍数:较大值除以最大公约数乘以较小值 辗转相除法: 较大的数a取模较小的数b,得取模值c 若取模值等于0 则最大公约数为取模值,否则继续下一步 a与c再次取模,回到第二步 //求最大公约数gcd以及最大公倍数lcm // 36 24 36/24 // 24 12 24/12 // 0 结束最大公约数为12 // 求最小公倍数 // lcm(a, b) = (a * b)/g
137 0
|
算法 C++
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现
素数又称为质数,它指在一个大于1的自然数中,除了1和它自身外,没法被其他自然数整除的数。比1大,但不是素数的数称为合数。0和1既不是素数,也不是合数。因为素数的分布没有明显的规律,所以在程序中一般根据素数的定义来判断该数是否为素数。例如哥德巴赫猜想:哥德巴赫通过大量的数据猜测,所有不小于6的偶数,都可以表示为两个奇素数之和。后人将其称之为“1+1”。并且,对于每个不小于9的奇数,都可以表示为三个奇素数之和。
329 0
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现