当前位置:首页 > JavaScript

js实现完美数

2026-02-03 08:18:54JavaScript

完美数的定义

完美数是指一个正整数等于其所有真因数(不包括自身的因数)之和。例如,6的因数为1、2、3,且1 + 2 + 3 = 6,因此6是完美数。

判断完美数的算法

  1. 遍历所有可能的因数
    从1到n/2的范围内检查每个数是否能整除n,若能则将其加入因数列表。

  2. 计算因数之和
    将所有真因数相加,判断是否等于原数n。

JavaScript实现代码

function isPerfectNumber(n) {
    if (n <= 1) return false; // 完美数必须大于1

    let sum = 0;
    for (let i = 1; i <= n / 2; i++) {
        if (n % i === 0) {
            sum += i;
        }
    }
    return sum === n;
}

优化方法

对于较大的数,可以优化因数的遍历范围到√n,减少计算量:

js实现完美数

function isPerfectNumberOptimized(n) {
    if (n <= 1) return false;

    let sum = 1; // 1是所有数的因数
    for (let i = 2; i <= Math.sqrt(n); i++) {
        if (n % i === 0) {
            sum += i;
            if (i !== n / i) sum += n / i; // 避免重复添加平方数
        }
    }
    return sum === n;
}

示例测试

console.log(isPerfectNumber(6)); // true
console.log(isPerfectNumber(28)); // true
console.log(isPerfectNumber(12)); // false

注意事项

  • 完美数较为罕见,已知的完美数均为偶数,奇完美数是否存在尚未被证明。
  • 对于极大数的判断,可能需要更高效的算法或数学理论支持。

标签: 完美js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…