📜  整数 js 的素数 - Javascript(1)

📅  最后修改于: 2023-12-03 15:26:12.584000             🧑  作者: Mango

整数 JS 的素数 - Javascript

在 JavaScript 中,计算整数是否为素数可以使用多种方法。本文将介绍两种基本的算法和其实现方式。

方法一: 试除法

试除法是最简单的一种算法,其基本思想是对于一个整数 n,判断 n 是否可以被 2 至 n-1 中的任意整数整除。如果整除则说明 n 不是素数,否则说明 n 是素数。

以下是 JavaScript 的实现代码片段:

function isPrime(num) {
  // 不处理小于2的数
  if (num < 2) {
    return false;
  }
  // 筛除偶数
  if (num % 2 === 0) {
    return num === 2;
  }
  // 从3开始判断奇数是否为素数
  for (let i = 3; i <= Math.sqrt(num); i += 2) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

上述代码的时间复杂度为 O(sqrt(n))。

方法二: 埃氏筛法

埃氏筛法是最经典的一种算法,其基本思想是从 2 开始,将每个素数的倍数都标记成合数,然后依次枚举每个数,如果它没有被标记成合数,就是素数。

以下是 JavaScript 的实现代码片段:

function sieveOfEratosthenes(n) {
  const primes = new Array(n + 1).fill(true);
  primes[0] = false;
  primes[1] = false;
  for (let i = 2; i <= Math.sqrt(n); i++) {
    if (primes[i]) {
      for (let j = i * i; j <= n; j += i) {
        primes[j] = false;
      }
    }
  }
  return primes.reduce((acc, cur, i) => {
    if (cur) {
      acc.push(i);
    }
    return acc;
  }, []);
}

上述代码的时间复杂度为 O(nloglogn)。

总结

两种算法都是用于判定整数是否为素数的基本方法,其中试除法时间复杂度较低,适用于小的范围内的素数判定。埃氏筛法时间复杂度较高,但可以在一定范围内快速筛选出素数。在实际开发中可以根据需要选择不同的算法处理。