能顺便讲解一下寻找完美数的方法吗

选做:完美数
题面描述:
魔法世界有一个毕达哥拉斯学派,他们把一个数称为“完美数”,如果该数恰好等于它的因子之和。他们认为完美数具有神奇的魔力。如6的因子为1、2、3,而 6=1+2+3,因此6是“完美数”。创始人毕达哥拉斯说:“6象征着完满的婚姻以及健康和美丽,因为它的部分是完整的,并且其和等于自身。”
请找出给定范围中的完美数。

输入:
两个正整数m和n,以空格间隔,为指定的范围(包括m和n,m和n均不超过100000)。

输出:
在单行中输出给定范围内的所有完美数,每个完美数占一行。每个完美数的后面为一个冒号,然后由小到大输出它的因子,每个因子之后跟着一个空格,最后换行。

示例输入:
1 6

示例输出:
1: 1
6: 1 2 3

判断n是不是完美数:从1到n-1,看看这些数是不是n的因子,即能否被n整除,如果是因子的话,就统计一下和保存到s里,如果最后s==n,那么n就是完美数。

#include<stdio.h>
int main() {
    int m,n,s=0,f,i,j;
    scanf("%d %d",&m,&n);
    if(m>n) {
        int t=m;
        m=n;
        n=t;
    }
    for(i=m; i<=n; i++) {
        s=1;
        for(j=2; j<i; j++) {
            if(i%j==0) {
                s+=j;
            }
        }
        if(s==i) {
            printf("%d:",i);
            if(i==1)printf("1\n");
            else {
                for(j=1; j<i; j++) {
                    if(i%j==0) {
                        printf("%d ",j);
                    }
                }
                printf("\n");
            }
        }
    }
    return 0;
}

觉得有用的话采纳一下哈