4 7关于#c语言#的问题:所谓完数是指一个数与其除本身以外所有因子之和相等

.编程找出1000之内的所有完数。所谓完数是指一个数与其除本身以外所有因子之和相等。例如6除本身以外的因子有1、2、3,而6=1+2+3,所以6是一个完数。


#include <stdio.h>

int main(){
    int num=0;
    int f[999];
    int n;
//    scanf("%d",&n);
    for (int i = 2; i <= 1000; ++i) {
        int index = 0;
        int temp = 0;
        for (int j = 1; j <= i/2; ++j) {
            if(i%j==0){
                f[index] = j;
                temp += j;
                num++;
                index++;
            }
        }
        if(temp == i){
            printf("%d its factors are ",i);
            for (int j = 0; j < num; ++j) {
                printf("%d ",f[j]);
            }
            printf("\n");
        }
        num = 0;
    }

    return 0;
}

#include<stdio.h>
void main() {
    int m,s,i;
    for(m=2; m<1000; m++) {
        s=0;
        for(i=1; i<m; i++)
            if((m%i)==0)
                s=s+i;
        if(s==m) {
            printf("%d",m);
            printf("\n");
        }
    }
}

bool checkPerfectNumber(int num){
    if (num == 1) {
        return false;
    }

    int sum = 1;
    for (int d = 2; d * d <= num; ++d) {
        if (num % d == 0) {
            sum += d;
            if (d * d < num) {
                sum += num / d;
            }
        }
    }
    return sum == num;
}
//https://leetcode.cn/problems/perfect-number/solution/wan-mei-shu-by-leetcode-solution-d5pw/

#include
int main()
{
int n=1000;
int r,j,i;
for(i=1;i<=n; i++){
r = 0;
for(j=1;j<i;j++){
if(i%j == 0){
r = r + j;
}
}
if(r == i){
printf("the result is:%d\n",r);
}
}
return 0;
}

img


供参考


#include<stdio.h>
#include<iostream>

#define MAX  1000

void main() 
{
    int i, j, k;
    printf("1000以内的完数如下:\n");
    for (i = 2; i < MAX; i++)
    {
        j = 0;
        for (k = 1; k < i; k++)
            if ((i % k) == 0)
                j = j + k;
        if (j == i) 
            printf("%d \n", i);
    }
    system("pause");
}
#include <stdio.h>

int isPerfectNumber(int num) {
  if (num == 1)
    return 0;

  int sum = 1;
  for (int d = 2; d * d <= num; ++d) {
    if (num % d == 0) {
      sum += d;
      if (d * d < num)
        sum += num / d;
    }
  }
  return sum == num;
}

int main() {
  for (int i = 1; i < 1000; i++) {
    if (isPerfectNumber(i))
      printf("%d ", i);
  }
  return 0;
}

#include "stdio.h"
int main()
{
    int i,j,n,s;
    n=1000;
    for(i=2;i<=n;i++){
    s=0;
    for(j=1;j<i;j++)
    if(i%j==0)
    s+=j;
    if(s==i)
    printf("%d\n",i);}
    return 0;
}

之前写的有一篇完数的文章,里面也讲解到了思路,题主可做参考:


代码如下:

//编程:Code_流苏
#include<stdio.h>
int main()
{
    int i, j, s, n;  
    printf("请输入所选范围上限:");
    scanf("%d", &n);  
    printf("%d范围内的完数有:\n",n);
    for( i=2; i<=n; i++ )//变量i控制选定数范围
    {
        s=0;  //保证每次循环s的初值为0//s记录累加因子之和
        for( j=1; j<i; j++ )//变量j控制除数范围
        {
            if(i%j == 0)  //判断j是否为i的因子
                s += j;
        }
        if(s == i)  //判断因子这和是否和原数相等
            printf("%d ", i);
    }
    return 0;
}

如有帮助,还望采纳!

#include <stdio.h>
int main()
{
int a, i, sum = 0;
scanf("%d", &a);
for(i = 1; i<a; i++)
{
if(a%i == 0)
{
sum += i;
}
}
if(sum == a) printf("true");
else printf("false");
return 0;
}