C语言求完数,不能理解这个代码,求大神指教,最好能详细一点。万分感谢!!!

2025-04-02 11:20:54
推荐回答(1个)
回答1:

#include
#include        //使用sqrt函数要包含此头文件
int main() { 
int n, i, j, k, sum, temp; 
int a[10]; 
scanf("%d",&n); 
for(i = 1; i <= n; ++i) {     //在1~范围内逐个检查
sum = 1;             //初始化,1肯定是一个因子
for(j = 2; j <= sqrt(i); ++j) { //从2~根号i检查就够了,因为因子必定是成对出现的
if(i % j == 0) { //如果j是i的较小的一个因子
sum += j;         //累加j
temp = i / j;     //找出i的另一个因子 
if(temp > j && temp < i) //如果j与temp不相重
sum += temp;     //就加入另一个因子temp


if(sum == i) { //找到了一个完全数
k = 0;     //准备记录此数的因子
a[k++] = 1; //i的第一个因子
for(j = 2; j <= i / 2; ++j) { //找出它除自身外的全部因子
if(i % j == 0)     //如是因子
a[k++] = j;     //就存入数组保存

printf("%d = ", i);     //输出等式的左边
for(j = 0; j < k - 1; ++j) //输出前几个因子
printf("%d + ", a[j]); 
printf("%d\n", a[k - 1]);     //输出最后一个因子

}
}