首頁  >  文章  >  web前端  >  javascript怎麼算質數

javascript怎麼算質數

王林
王林原創
2023-05-09 12:23:361194瀏覽

質數是指只能被1和自身整除的正整數,是數學中的重要概念,在電腦科學中也有廣泛的應用。在Javascript中,我們可以使用以下幾種方法來計算質數。

  1. 暴力枚舉法

暴力枚舉法是一種簡單直接的計算質數的方法。我們可以從2開始遍歷到n-1,依序判斷每個整數是否能夠整除n。如果存在一個整數m能夠整除n,則n不是質數。如果每個整數m都無法整除n,則n是質數。

以下是暴力枚舉法的Javascript實作程式碼:

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

Sieve of Eratosthenes是一種更快速計算質數的方法。它的基本思想是先把所有正整數按順序排列,然後從2開始依次篩選出能夠整除2的數,然後把能夠整除3的數篩選出來,然後把能夠整除5的數篩選出來,以此類推,直到不能再篩選出質數為止。

以下是Sieve of Eratosthenes的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, index) => {
    if (cur) {
      acc.push(index);
    }

    return acc;
  }, []);
}
  1. Miller-Rabin演算法

Miller-Rabin演算法是一種機率性的質數測試演算法,它是基於一個重要的定理:如果n是一個合數,則至少有一半的小於n的正整數a滿足a^(n-1) mod n != 1。 Miller-Rabin演算法的核心就是對於給定的整數n,進行k次隨機檢測,並以此判斷n是否為質數。通常情況下,只需要進行15-20次檢測即可得到較為準確的結果。

以下是Miller-Rabin演算法的Javascript實作程式碼:

// 快速幂算法
function powerMod(a, b, m) {
  let res = 1;

  while (b) {
    if (b & 1) {
      res = (res * a) % m;
    }

    a = (a * a) % m;
    b >>= 1;
  }

  return res;
}

function isPrime(num, k) {
  if (num < 2) {
    return false;
  }

  if (num === 2 || num === 3) {
    return true;
  }

  let d = num - 1;
  let r = 0;

  while (d % 2 === 0) {
    d /= 2;
    r++;
  }

  for (let i = 0; i < k; i++) {
    const a = 2 + Math.floor(Math.random() * (num - 3));
    let x = powerMod(a, d, num);

    if (x === 1 || x === num - 1) {
      continue;
    }

    let flag = false;

    for (let j = 1; j < r; j++) {
      x = (x * x) % num;

      if (x === num - 1) {
        flag = true;
        break;
      }
    }

    if (!flag) {
      return false;
    }
  }

  return true;
}

以上就是Javascript中計算質數的三種常用方法,不同的應用場景下可以選擇適合的方法來計算質數。

以上是javascript怎麼算質數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn