素数及其在 JavaScript 中的应用

素数是指大于1的自然数中,除了1和本身以外,没有其他因数的数。素数是数论中重要的概念,在密码学、计算机科学等领域有广泛的应用。本文将介绍素数的定义、判断方法,并通过 JavaScript 代码示例展示如何判断一个数是否为素数。

1. 素数的定义

素数是指大于1的自然数,除了1和本身以外,没有其他因数的数。例如,2、3、5、7等都是素数,而4、6、8等都不是素数。数学上,素数的定义可以用如下公式表示:

$$\forall n > 1, \nexists p: 1 < p < n \quad \text{and} \quad p , \text{divides} , n$$

其中,$n$是大于1的自然数,$p$是$n$的因数。

2. 判断素数的方法

判断一个数是否为素数有多种方法,常见的有试除法和素数筛选法。

2.1 试除法

试除法是最直观和简单的判断素数的方法之一。它的基本思想是,对于一个大于1的数$n$,从2开始,逐个除以小于$n$的自然数,如果能整除,则$n$不是素数;否则,$n$是素数。

我们可以通过代码来实现试除法:

// 判断一个数是否为素数
function isPrime(number) {
  if (number <= 1) {
    return false;
  }
  
  for (let i = 2; i < number; i++) {
    if (number % i === 0) {
      return false;
    }
  }
  
  return true;
}

// 测试示例
console.log(isPrime(2)); // true
console.log(isPrime(4)); // false
console.log(isPrime(7)); // true
console.log(isPrime(9)); // false

在上述代码中,我们首先判断数是否小于等于1,如果是,则直接返回false。然后,从2开始逐个除以小于该数的自然数,如果存在能整除的数,则返回false;否则,返回true。通过测试示例,我们可以看到2、4、7和9的素数判断结果分别为truefalsetruefalse

2.2 素数筛选法

素数筛选法是一种高效的判断素数的方法,常用的有埃拉托斯特尼筛法和欧拉筛法。这两种方法的基本思想都是通过逐步筛选来找出素数。

埃拉托斯特尼筛法的核心思想是从2开始,将所有能整除2的数标记为合数,然后再从最小的未标记数开始,重复这个过程,直到所有的数都被标记为合数或素数。最终,剩下的未被标记的数就是素数。

我们可以使用以下代码实现埃拉托斯特尼筛法:

// 筛选出小于等于n的素数
function sieveOfEratosthenes(n) {
  const isPrime = new Array(n + 1).fill(true);
  isPrime[0] = false;
  isPrime[1] = false;
  
  for (let i = 2; i <= Math.sqrt(n); i++) {
    if (isPrime[i]) {
      for (let j = i * i; j <= n; j += i) {
        isPrime[j] = false;
      }
    }
  }
  
  const primes = [];
  for (let i = 2; i <= n; i++) {
    if (isPrime[i]) {
      primes.push(i);
    }
  }
  
  return primes;
}

// 测试示例
console.log(sieveOfEratosthenes(10)); // [2, 3, 5, 7]
console.log(sieveOfEratosthenes(20)); // [2, 3, 5, 7, 11, 13, 17, 19]

在上述代码中,我们首先创建一个布尔数组isPrime,用于标记每个