求完美数的程序:输出错误。完全数是其因子之和等于给定数的数

program to find perfect number : error in output . perfect number is number whose sum of factors equals the given number

#include<stdio.h>
#include<math.h>

int main()
{
 int rem, num, i, sum;

 sum=0;
 num=28;

 for(i=1;i<num;i++)
 {
     if(num%i==0)
     {
         rem=num%i;
         sum=sum+rem;
     }
 }
 
 if(sum==num)
 {  
    printf("perfect number");
 }
 else
    printf("not perfect");
}

你为什么要这样做,你需要得到num的所有真约数的总和(自然数的真约数是严格小于该数的约数),但是什么您正在做的是添加 rem = num%i,这基本上总是 0,因为 num 可以被 i 整除,您在 if 中检查的内容,所以您在做什么没有任何意义

if(num%i==0)
{
    rem=num%i;  // here `rem` is always `0` as `num%i == 0`
    sum=sum+rem;  
}

而你的逻辑应该如下所示,因为除数是 i 所以你应该添加所有除数(当 num 被 [=16 整除时用 i 表示=]) 在你的 sum

if(num%i==0)
{
    sum = sum + i;
}