You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript素数生成函数问题:从1到n存数组却为空

你的素数判断逻辑完全写反啦,这就是数组为空的原因

兄弟,我一眼就瞅出你代码里的问题了——素数判断的逻辑彻底搞反了,再加上循环起始值不对,导致push语句几乎没机会执行,数组自然是空的。咱们一步步拆解问题:

先看你当前的代码:

function solve(args){ 
    var m=new Array(); 
    for(let a=1;a<=args;a++){ 
        for(let b=1;b<=Math.sqrt(a);b++){ 
            if(a%b==0){ 
                break; 
            } 
            m.push(a); 
        } 
    } 
}

核心问题1:循环起始值+判断逻辑完全颠倒

所有自然数都能被1整除,所以你的内层循环从b=1开始的瞬间,就会触发a%b==0的条件,直接break跳出内层循环——这就导致m.push(a)根本没机会执行!不管a是1还是其他数,全都会因为b=1的判断直接跳出循环,数组当然一直是空的。

而且你现在的逻辑是「找到能整除的数就停止,否则加入数组」,这和素数的判断逻辑完全相反:素数是找不到除了1和自身之外的因数才符合条件,咱们得反过来写。

修正后的代码

结合你把1视为素数的需求,我帮你调整了逻辑,还加了返回语句(原来的函数没返回数组,就算逻辑对了也拿不到结果):

function solve(args){ 
    var m = new Array(); 
    // 单独处理1(按照你的要求视为素数)
    if(args >= 1) {
        m.push(1);
    }
    // 处理大于1的数
    for(let a = 2; a <= args; a++){ 
        let isPrime = true;
        // 从2开始检查到sqrt(a),找是否有因数
        for(let b = 2; b <= Math.sqrt(a); b++){ 
            if(a % b === 0){ 
                isPrime = false; // 找到因数,标记为非素数
                break; // 没必要继续检查了
            } 
        }
        if(isPrime){
            m.push(a); // 确认是素数再加入数组
        }
    }
    return m; // 必须返回数组,调用函数才能拿到结果
}

比如你调用solve(10),会返回[1,2,3,5,7],完全符合你的需求。

内容的提问来源于stack exchange,提问作者Y.Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:52:39