完数

【题目】

 一个数的因子就是所有可以整除这个数的数,不包括这个数自身。比如,6的因子是1,2,3
 一个数如果恰好等于它的因子之和,这个数就称为“完数“。 例如6=1+2+3
 请编写一个函数,入参是一个正整数n,返回值是0到n之间(闭区间)的完数的个数

【难度等级】

  简单

【示例】

* 示例 1:

  输入:num = 28
  输出:5
  解释:28 = 1 + 2 + 4 + 7 + 14          1, 2, 4, 7, 和 14 是 28 的所有正因子。

* 示例 2:

  输入:num = 7
  输出:0

【提示】

1 <= num <= 10的8次方

【代码】

  public int countFactors(int num) {
          int count = 0; // 因子个数
          int sum = 1; //因子和
          if (num < 6) {
              return 0;
          }
          for (int i = 2; i * i <= num; i++) {
              if (num % i != 0) {
                  continue;
              }
              sum = sum + i; // 当前因子相加
              if (i * i != num) { // 还有num/i的因子,且不与i重复
                  sum = sum + num/i;
              }
              count++; // 统计因子个数
          }

          if (sum == num) { // 因子和等于当前数,即完数。返回该完数因子个数。
              return count;
          }

          return 0;
      }
posted @ 2025-05-16 16:17  jasonchen539  阅读(14)  评论(0)    收藏  举报