1 条题解
-
0
#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
- 上传者