📜  Javascript 素数检查 - Javascript (1)

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

Javascript 素数检查 - Javascript

在编程中,素数检查是一项很重要的任务。素数的定义是只能被1和它本身整除的数字。在Javascript中,我们可以使用不同的方法来检查一个数字是否为素数。

方法一:暴力法

暴力法是最基本的方法,它通过循环从2开始迭代判断每一个数字是否为该数字的因数。如果该数字只有1和它本身两个因数,则该数字是素数。

function isPrime(number) {
  if (number < 2) {
    return false;
  }
  
  for (var i = 2; i < number; i++) {
    if (number % i === 0) {
      return false;
    }
  }
  
  return true;
}

该方法的时间复杂度为O(n),不适用于大数据量的素数检查。

方法二:改进暴力法

改进暴力法通过缩短循环范围来加快素数检查的速度。在判断一个数字是否为素数时,只需判断该数字是否能被小于等于该数字开平方后得到的数字整除即可,因为大于该数字开平方的数字都是该数字的因数的另一个大于该数字开平方的因数。

function isPrime(number) {
  if (number < 2) {
    return false;
  }
  
  var sqrtNumber = Math.sqrt(number);
  
  for (var i = 2; i <= sqrtNumber; i++) {
    if (number % i === 0) {
      return false;
    }
  }
  
  return true;
}

该方法的时间复杂度为O(√n),适用于大数据量的素数检查。

方法三:埃拉托色尼筛法

埃拉托色尼筛法是一种高效的素数检查方法。该方法通过一系列的步骤得到素数列表,判断一个数字是否为素数时只需判断该数字是否在素数列表中即可。

function sieveOfEratosthenes(n) {
  var primes = [];
  var isPrime = new Array(n + 1).fill(true);
  isPrime[0] = false;
  isPrime[1] = false;
  
  for (var i = 2; i <= n; i++) {
    if (isPrime[i]) {
      primes.push(i);
      
      for (var j = i * i; j <= n; j += i) {
        isPrime[j] = false;
      }
    }
  }
  
  return primes;
}

function isPrime(number) {
  var primes = sieveOfEratosthenes(Math.floor(Math.sqrt(number)));
  
  for (var i = 0; i < primes.length; i++) {
    if (number % primes[i] === 0) {
      return false;
    }
  }
  
  return true;
}

该方法的时间复杂度为O(nloglogn),适用于大数据量的素数检查。

以上三种方法都可以用于Javascript素数检查,选择适合自己的方法进行使用即可。