1 条题解

  • 0
    @ 2026-1-27 19:34:17
    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
        // 问题分析:找出区间[m, n]内的完全数个数,完全数定义为「真因子和 = 自身」
        // 解题步骤:对每个数i,计算其所有因子的和(含自身),再减去自身得到真因子和,判断是否等于i
        
        int m,n;               // [1] m、n-输入的两个正整数,表示待检查的区间 [m, n]
        cin>>m>>n;             // [2] 读取输入的区间范围
        int sum=0;             // [3] sum-统计区间[m, n]内的完全数个数
        
        // 遍历区间内的每个数,检查是否为完全数
        for(int i=m;i<=n;i++){
            int sum1=0;        // [4] sum1-存储数i的所有正因子(包含i自身)的和
            // 寻找i的所有因子:因子成对出现(j 和 i/j),只需遍历到√i即可
            for(int j=1;j*j<=i;j++){
                if(i%j==0){    // [5] 如果j是i的因子
                    sum1 += j + i/j;  // [6] 将成对的因子j和i/j加入因子和sum1
                    if(i/j == j){
                        sum1 -= j;  // [7] 若j和i/j是同一个因子(i为平方数),避免重复累加,减去一个j
                    }
                }
            }
            // 完全数判断:真因子和(因子和sum1 减去自身i)是否等于i
            if(sum1 - i == i){
                sum++;         // [8] 是完全数,计数加1
            }	
        }
        cout<<sum;             // [9] 输出区间内完全数的个数
        return 0;
    }
    
    • 1

    信息

    ID
    1189
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者