当前位置:首页 > JavaScript

js实现质数

2026-02-01 11:14:13JavaScript

判断一个数是否为质数

质数是指大于1的自然数,除了1和它本身外,没有其他正因数。以下是用JavaScript实现判断质数的方法:

function isPrime(num) {
  if (num <= 1) return false;
  if (num <= 3) return true;

  if (num % 2 === 0 || num % 3 === 0) return false;

  for (let i = 5; i * i <= num; i += 6) {
    if (num % i === 0 || num % (i + 2) === 0) return false;
  }

  return true;
}

生成指定范围内的质数列表

以下函数可以生成从2到指定上限之间的所有质数:

js实现质数

function generatePrimesUpTo(max) {
  const primes = [];
  for (let i = 2; i <= max; i++) {
    if (isPrime(i)) {
      primes.push(i);
    }
  }
  return primes;
}

埃拉托斯特尼筛法(高效算法)

对于较大的数字范围,可以使用更高效的筛法:

js实现质数

function sieveOfEratosthenes(max) {
  const sieve = new Array(max + 1).fill(true);
  sieve[0] = sieve[1] = false;

  for (let i = 2; i * i <= max; i++) {
    if (sieve[i]) {
      for (let j = i * i; j <= max; j += i) {
        sieve[j] = false;
      }
    }
  }

  return sieve.reduce((primes, isPrime, index) => {
    if (isPrime) primes.push(index);
    return primes;
  }, []);
}

获取第n个质数

如果需要获取第n个质数,可以使用以下方法:

function getNthPrime(n) {
  if (n < 1) return null;

  let count = 0;
  let candidate = 2;

  while (count < n) {
    if (isPrime(candidate)) {
      count++;
      if (count === n) return candidate;
    }
    candidate++;
  }

  return null;
}

性能优化提示

对于非常大的数字,可以考虑以下优化:

  • 预计算并缓存已知质数
  • 使用概率性测试算法(如Miller-Rabin测试)处理极大数字
  • 避免不必要的计算,如偶数可以直接排除(除了2)

这些方法可以根据具体需求组合使用,例如先用简单方法处理小数字,对大数字使用更复杂的算法。

标签: 质数js
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…