2301_80358950 2023-11-02 17:42 采纳率: 50%
浏览 8
已结题

求1到1000内因子并且是完数,不包括它本身。

img


求1到1000内的因子并且是完数,不包括他本身最后一个一个输出

  • 写回答

2条回答 默认 最新

  • a5156520 2023-11-02 18:10
    关注

    一个实现,如下:

    参考链接:
    https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0/370913?fromtitle=%E5%AE%8C%E6%BB%A1%E6%95%B0&fromid=6499617

    
    #include <stdio.h>
    #include <stdlib.h>
    
    int * findPerfectNumber(int num){
        
        int sum=0;
        int n=0;  //  存储num真因子个数的变量 
        
        // 遍历区间1到(num-1)之间的所有数 
        for(int i=1;i<num;i++){
            if(num%i==0){   // 如果当前的数可以整除num,则将其累加到真因子之和sum中 
                sum+=i; 
                n++;   // 真因子个数+1 
            }
        }
    //    printf("sum=%d,n=%d\n",sum,n);
        
        // 申请存储参数num完数信息的内存,n个int用于存储真因子,另外2int用于存储真因子个数 和 参数num与真因子之和的差值 
        int * result = (int *)malloc(sizeof(int)*(n+2));
        result[0]=num-sum;  // 第一个位置存储num与sum的差值,用于判断参数num是否是完数,等于0时为完数 
        result[1]=n;     // 第二个位置存储 完数个数,用于打印完数式子后面部分 
    //    printf("result[0]=%d,result[1]=%d\n",result[0],result[1]); 
    
        int j=2; // 存储完数从下标为2的位置开始 
        for(int i=1;i<num;i++){
            if(num%i==0){   
                result[j]=i; // 将真因子依次存储到剩余位置 
            //    printf("result[%d]=%d\n",j,result[j]);
                j++;
            }
        }     
        
        // 返回记录了num完数信息的int指针 
        return result;
    } 
    
    int main(void){
        
    
        for (int i=1;i<=1000;i++){
            
            // 调用函数findPerfectNumber()判断输入的数num 是否为完数 
            int * result = findPerfectNumber(i);
            
            if (result[0]==0){  // 如果是完数,则按格式打印出此完数的信息 
                
                // https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0/370913?fromtitle=%E5%AE%8C%E6%BB%A1%E6%95%B0&fromid=6499617
                printf("%d its factors are",i);
                // 打印式子的后半部分
                // 因为完数信息数组多了个2个位置记录了其他信息,故打印完数从下标2开始,并且结束下标也+2 
                for(int i=2;i<(result[1]+2);i++){
                    printf(" %d",result[i]);
                }
                printf("\n");    
            } 
            
            free(result);
        }
        
        
        
        return 0;
        
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 创建了问题 11月2日