JavaScript 中能被前 n 個數字整除的最小數字


在上述問題陳述中,我們的任務是藉助 Javascript 功能找到能被前 n 個數字整除的最小數字。所以

理解問題

眼前的問題是找到一個能被前 n 個數字整除的最小數字。或者我們可以說,我們必須尋找一個可以被 1 到 n 中的每個數字整除且沒有餘數的最小數字。

給定問題的邏輯

為了解決這個問題,我們可以使用最小公倍數 (LCM) 的概念。你可能知道,兩個數字的最小公倍數是能被這兩個數字整除的最小倍數。因此,透過使用這個概念,我們最終可以找到能被 1 到 n 中所有數字整除的最小數字。為了在 Javascript 中完成這項任務,我們可以編寫一個可以迭代計算最小公倍數的函式。因此,我們將從初始值 1 開始,並將其乘以每個後續數字的最小公倍數。因此,藉助它,我們將不斷更新結果的值,直到達到範圍內的最後一個數字。

演算法

步驟 1:由於我們必須找到能被前 n 個數字整除的最小數字。因此,為了完成此任務,我們將定義一個名為 smallestDivisibleByN 的函式,並傳遞一個 n 引數。

步驟 2:在上述函式內部,我們將宣告一個名為 result 的變數並將它的值初始化為 1。之後,我們將藉助 for 迴圈迭代計算最小公倍數。在這個迴圈中,計算最小公倍數並將它的值儲存到 result 變數中。

步驟 3:現在我們在上一步中定義了 lcm 函式,在這一步中,我們將建立此函式,命名為 lcm 並傳遞兩個引數 a 和 b。在這個函式中,我們將返回 (a * b) / gcd(a, b) 的值。

步驟 4:由於我們在上面使用了 gcd 函式,所以現在也該定義該函數了。因此,計算兩個數字的最大公約數 GCD。建立一個函式 gcd 並傳遞兩個引數 a 和 b。

步驟 5:在這個函式中,我們將檢查 b 的值是否等於零。如果條件為真,則返回 a 的值。否則,返回 gcd(b, a % b) 的值。

示例

function smallestDivisibleByN(n) {
   let result = 1;

   // Calculate the LCM iteratively
   for (let i = 2; i <= n; i++) {
      result = lcm(result, i);
   }

   return result;
}

// Calculate the LCM of two numbers
function lcm(a, b) {
   return (a * b) / gcd(a, b);
}

// Calculate the greatest common divisor (GCD) of two numbers
function gcd(a, b) {
   if (b === 0) {
      return a;
   }
   return gcd(b, a % b);
}

console.log(smallestDivisibleByN(10));

輸出

2520

複雜度

查詢能被前 n 個數字整除的最小數字的時間複雜度為 O(n log n),其中 n 是作為輸入提供的數字。我們建立的函式從 2 遍歷到 n 以計算最小公倍數。函式的空間複雜度為 O(1),因為我們使用了恆定數量的額外空間來儲存中間結果。

結論

因此,我們已經成功地使用最小公倍數的概念編寫了查詢能被前 n 個數字整除的最小數字的問題。該程式碼具有 O(n log n) 的時間複雜度,這使得該程式碼適用於較大的 n 值。

更新於:2023年8月16日

212 次檢視

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.