简单算法题-完美数

简单,算法,完美 · 浏览次数 : 64

小编点评

```javascript var checkPerfectNumber = function(num) { if(num < 6) { return false; } var mid = Math.sqrt(num); var start = 2; var res = 0; while(start <= mid) { const d = num / start; if(parseInt(d) === d) { res = res + start + d; } start++; } return num == res + 1; }; console.log(checkPerfectNumber(28)); // true ``` **解释:** 1. 我们首先检查 num 的大小,如果小于 6,它不能是完美数,所以我们返回 `false`。 2. 我们计算 num 的平方根,并设置 `mid` 为其平方根的整数部分。 3. 我们使用 `start` 从 2 开始枚举所有可能的因子。 4. 当我们找到一个因子 d 的值与它本身相等时,我们将其添加到 `res` 中。 5. 如果 `res` 等于 num 的值,则说明 num 是一个完美数,我们返回 `true`。 6. 如果我们遍历完所有可能的因子后,如果 num 等于 `res` + 1,则说明 num 是一个完美数,我们返回 `true`。

正文

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。

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

/**
 * @param {number} num
 * @return {boolean}
 */
var checkPerfectNumber = function(num) {
  if(num < 6){
    return false
  }
  var mid = Math.sqrt(num)
  var start = 2
  var res = 0
  while(start <= mid) {
    const d = num/start
    if( parseInt(d)=== d){
      res=res + start + d
    }
    start++
  }
  return num == res + 1
};

与简单算法题-完美数相似的内容:

简单算法题-完美数

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。 输入:num = 28 输出:true 解释:28 = 1 + 2 + 4 + 7 + 14 1, 2, 4, 7, 和 14 是 28 的所有正因子。 /** * @param {number} num *

算法学习笔记(6): 树链剖分

树链剖分 树链剖分是一个很神奇,但是在树上可以完成一些区间操作问题 简单来说,就是把一棵树分成一条条的链,通过维护链上的信息来维护整棵树的信息 基础知识可以参考我的另外一篇博客:算法学习笔记(5): 最近公共祖先(LCA) 这里假设你已经掌握了上述博客中的所有相关知识,并清晰了其背后的原理 性质?发

策略梯度玩 cartpole 游戏,强化学习代替PID算法控制平衡杆

cartpole游戏,车上顶着一个自由摆动的杆子,实现杆子的平衡,杆子每次倒向一端车就开始移动让杆子保持动态直立的状态,策略函数使用一个两层的简单神经网络,输入状态有4个,车位置,车速度,杆角度,杆速度,输出action为左移动或右移动,输入状态发现至少要给3个才能稳定一会儿,给2个完全学不明白,给

基于神经网络的呼吸音分类算法

简介 在过去的几十年里,许多机器学习(ML)方法被引入来分析呼吸周期的声音,包括爆裂声、咳嗽声和喘息声[1-6]。然而,几乎所有传统的ML模型都完全依赖于手工制作的功能。此外,需要高度复杂的预处理步骤来利用设计的特征[4-6]。因此,仅仅基于ML的模型可能对肺部声音中的外部/内部噪声不具有鲁棒性,并

CF1827

# CF1827 ## A. Counting Orders 简单计数。 两个都排序,双指针维护一下 `a[i]` 在 `b[p]` 的位置(`a[i] ## C. Palindrome Partition ~~回文好题~~。 考虑利用 `Manacher` 求出每一个偶数的回文串。 > 参考:[算

IO调度算法的简单学习与整理

# IO调度算法的简单学习与整理 ## 前言 ``` 前几天整理了 /sys/block/sda/queue/nr_requests 以及 /sys/block/sda/device/queue_depth 的两个参数 # 没别的意思 我就是再背一遍,怕自己记性不好记不住. 其实队列数量和队列参数之

JS比较数值大小

一、 简单循环算法 代码如下: const numbers = [5, 6, 2, 3, 7]; let max = -Infinity; for (let i = 0; i < numbers.length; i++) { if (numbers[i] > max) max = numbers[i

K-means聚类是一种非常流行的聚类算法

K-means聚类是一种非常流行的聚类算法,它的目标是将n个样本划分到k个簇中,使得每个样本属于与其最近的均值(即簇中心)对应的簇,从而使得簇内的方差最小化。K-means聚类算法简单、易于实现,并且在许多应用中都非常有效。 K-means算法的基本步骤: 选择初始中心:随机选择k个样本点作为初始的

应届生必考的斐波那契数列 优化版本

- 开题引入斐波那契 - 代码演示: 递归、循环 - 递归 vs 循环 - 时间复杂复高,指数型O(2^n); 推导过程 - 占用线程堆栈, 可能导致栈满异常 - 压测演示 - 20230816补充尾递归 ## 斐波那契数列 打入门软件开发,斐波那契数列便是绕不过去的简单编程算法。 一个老生常谈的思

C#冒泡排序算法

冒泡排序实现原理 冒泡排序是一种简单的排序算法,其原理如下: 从待排序的数组的第一个元素开始,依次比较相邻的两个元素。 如果前面的元素大于后面的元素(升序排序),则交换这两个元素的位置,使较大的元素“冒泡”到右侧。 继续比较下一对相邻元素,重复步骤2,直到遍历到数组的倒数第二个元素。此时,最大的元素