JavaScript 中所有素數的和


在給定的問題陳述中,我們必須藉助 Javascript 功能計算所有素數的和。因此,為了計算總和,我們將設定素數的上限。

理解問題

問題是計算小於給定上限的所有素數之和。素數是一個大於 1 的正整數,並且除了 1 和其自身之外沒有其他約數。例如,如果素數的限制是 10,則小於 10 的素數是 2、3、5、7,這些數的和是 2 + 3 + 5 + 7 = 17。因此,所需結果應為 17。因此,我們的任務是實現程式碼以生成給定限制的素數之和。

給定問題的邏輯

為了解決這個問題,我們將使用 Javascript。為此,我們將基本上使用兩個函式來獲得所需的結果。

第一個函式將用於檢查當前數字是否為素數。我們還將驗證 2 到該數字平方根之間是否存在任何約數。如果我們找到了當前數字的約數,那麼我們可以說該數字不是素數,因為素數不能被任何其他數字整除。結果我們將說該數字不是素數。如果未驗證該條件,我們將返回該數字作為素數。

第二個函式用於計算聲明範圍內所有素數的和。因此,我們將使用迴圈遍歷值。然後,使用我們定義的第一個函式,我們將確定該數字是否為素數。如果該數字是素數,則新增該值以獲得總和,最後我們將獲得所需的結果作為所有素數的和。

演算法

步驟 1:由於我們必須計算給定限制下素數的和,因此我們將定義一個函式並將引數 num 作為輸入傳遞。

步驟 2:眾所周知,素數從 2 開始。因此,我們將定義一個條件來檢查給定的輸入數字是否大於或等於 1。此條件檢查是否存在任何負數,因為負數不是素數,因此返回 false。

步驟 3:現在,我們將使用 for 迴圈迭代從 2 到該數字平方根的數字。並檢查條件,如果找到約數,則該數字不是素數,因此我們將返回 false。

步驟 4:在上述條件之外,如果沒有找到約數,則該數字是素數,因此我們將返回 true。

步驟 5:使用另一個函式,我們將計算給定數字之前所有素數的和。我們將在此函式中傳遞一個引數作為限制。此限制輸入將定義將新增素數的範圍。

步驟 6:由於我們需要將給定素數的和儲存起來,因此我們將使用一個變數來儲存素數的和並將值初始化為零。

步驟 7:現在我們需要迭代從 2 到限制的數字。在迴圈內,我們將檢查該數字是否為素數。如果我們遇到素數,則將總和新增到 sum 變數中。

步驟 8:由於我們需要將 sum 變數顯示到控制檯,因此我們將返回 sum 的值。

示例

 // Function to check the number is prime
function isPrime(num) {
   if (num <= 1) {  // 1 and negative numbers are not prime
      return false;
   }
   // check for divisors from 2 to square root of the number
   for (let i = 2; i <= Math.sqrt(num); i++) {
      // if a divisor is found, the number is not prime
      if (num % i === 0) {
         return false;
      }
   }
   // if no divisors are found, the number is prime
   return true;
}
 // Function to get the sum of all the primes
function sumOfPrimes(limit) {
   let sum = 0;

   for (let i = 2; i <= limit; i++) {
      // check if the number is prime
      if (isPrime(i)) {
         // add the prime number to the sum
         sum += i;
      }
   }

   return sum;  // return the final sum
}

const limit = 50; // Change this value to set the upper limit
const sum = sumOfPrimes(limit);
console.log("Sum of prime numbers up to", limit, "is", sum);

輸出

Sum of prime numbers up to 50 is 328

複雜度

用於檢查數字是素數還是非素數的第一個函式使用迴圈迭代數字,因此此函式的複雜度為 O(sqrt(n)),其中 n 是給定的數字。此函式消耗的空間為 O(1),因為它使用固定數量的記憶體來儲存變數。

第二個函式迭代從 2 到給定限制的素數。對於每次迭代,我們都呼叫了上述函式,該函式的時間複雜度為 O(sqrt(n))。因此,此函式的時間複雜度為 O(limit * sqrt(n))。此函式的空間複雜度也是 O(1),因為該函式使用固定數量的記憶體來儲存變數。

結論

我們建立的程式碼提供了一種有效的方法來計算 Javascript 中給定限制下所有素數的和。正如我們已經實現兩個函式來獲得所需的總和一樣。此函式的時間複雜度取決於限制和限制內的最大數字。

更新於:2023年8月16日

2K+ 次檢視

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.