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

如何在JavaScript中实现质数数组的降序排列?

如何实现降序排列的100以内质数数组?

嘿,当然可以通过反转质数数组来实现降序需求,不过先看看你现有代码里的小问题——最后那段倒序遍历的循环,数组索引是从0开始的,primos.length这个位置根本不存在元素,所以会先输出undefined,之后才是正确的质数。咱们先把这个bug修好,再给你几种更简洁的实现思路:

方案一:修复原有的倒序遍历逻辑

只需要把循环的起始索引改成primos.length - 1,同时让循环条件包含i >= 0,就能正确遍历到所有元素:

var primos = []; 
for (var i = 0; i <= 100; i++) { 
  var fake = false; 
  for (var j = 2; j <= i; j++) { 
    if (i%j==0 && j!=i) { 
      fake = true; 
    } 
  } 
  if (fake === false) { 
    primos.push(i); 
  } 
} 
// 修复索引问题,从最后一个有效元素开始遍历
for(i = primos.length - 1; i >= 0; i--) { 
  console.log(primos[i]); 
}

方案二:用reverse()方法直接反转数组

收集完升序的质数数组后,调用数组自带的reverse()方法就能一键反转成降序,之后直接遍历输出就行:

var primos = []; 
for (var i = 0; i <= 100; i++) { 
  var fake = false; 
  for (var j = 2; j <= i; j++) { 
    if (i%j==0 && j!=i) { 
      fake = true; 
    } 
  } 
  if (fake === false) { 
    primos.push(i); 
  } 
} 
// 反转数组得到降序排列
primos.reverse();
// 遍历输出每个质数
primos.forEach(num => console.log(num));

方案三:直接从大到小遍历收集质数

如果不想额外做反转或倒序遍历,咱们可以直接从100开始往下遍历,符合质数条件的就加入数组,这样得到的数组本身就是降序的,一步到位:

var primos = []; 
// 从100倒着遍历到0
for (var i = 100; i >= 0; i--) { 
  var fake = false; 
  for (var j = 2; j <= Math.sqrt(i); j++) { // 这里优化了质数判断的循环范围,提升性能
    if (i%j==0 && j!=i) { 
      fake = true; 
      break; // 找到因数就立刻终止内层循环,不用做无用功
    } 
  } 
  if (fake === false) { 
    primos.push(i); 
  } 
} 
// 直接输出就是降序的质数
primos.forEach(num => console.log(num));

顺便提个小优化:判断质数时,内层循环不需要遍历到i,只需要到Math.sqrt(i)就足够了——因为如果i有大于平方根的因数,那对应的另一个因数肯定小于平方根,这样能减少很多不必要的循环,让代码跑得更快~

内容的提问来源于stack exchange,提问作者Pedro Sturmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:16