当前位置:首页 > JavaScript

js实现质数

2026-03-14 09:56:00JavaScript

判断质数的基本方法

质数是大于1的自然数,除了1和它本身外没有其他约数。在JavaScript中可以通过循环和条件判断实现质数检测。

js实现质数

function isPrime(num) {
  if (num <= 1) return false;
  for (let i = 2; i < num; i++) {
    if (num % i === 0) return false;
  }
  return true;
}

优化算法效率

基础方法存在效率问题,可以通过数学优化减少循环次数。只需要检查到√n即可,因为大于√n的因数必然对应一个小于√n的因数。

js实现质数

function isPrimeOptimized(num) {
  if (num <= 1) return false;
  const limit = Math.sqrt(num);
  for (let i = 2; i <= limit; i++) {
    if (num % i === 0) return false;
  }
  return true;
}

生成质数列表

埃拉托斯特尼筛法能高效生成指定范围内的所有质数。其原理是逐步筛除非质数的倍数。

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

  for (let i = 2; i <= Math.sqrt(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;
  }, []);
}

处理大数的情况

对于非常大的数字,可以考虑使用概率性测试算法如Miller-Rabin测试,虽然不能100%准确但效率更高。

function isProbablyPrime(n, k = 5) {
  if (n <= 1) return false;
  if (n <= 3) return true;

  let d = n - 1;
  while (d % 2 === 0) d /= 2;

  for (let i = 0; i < k; i++) {
    if (!millerTest(n, d)) return false;
  }
  return true;
}

function millerTest(n, d) {
  let a = 2 + Math.floor(Math.random() * (n - 4));
  let x = modPow(a, d, n);

  if (x === 1 || x === n - 1) return true;

  while (d !== n - 1) {
    x = (x * x) % n;
    d *= 2;
    if (x === 1) return false;
    if (x === n - 1) return true;
  }
  return false;
}

function modPow(a, b, mod) {
  let result = 1n;
  a = BigInt(a);
  b = BigInt(b);
  mod = BigInt(mod);

  a = a % mod;
  while (b > 0n) {
    if (b % 2n === 1n) result = (result * a) % mod;
    a = (a * a) % mod;
    b = b / 2n;
  }
  return Number(result);
}

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

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…