天天看點

判斷一個數是否是質數

效率地判斷一個數是否是質數

題:寫一個isPrime()函數,當其為質數時傳回true,否則傳回false。

思路簡述:

1、首先, 因為JavaScript不同于C或者Java,是以你不能信任傳遞來的資料類型。如果沒有明确地告訴你,你應該詢問他是否需要做輸入檢查,還是不進行檢查直接寫函數。嚴格上說,應該對函數的輸入進行檢查。

2、要記住:負數不是質數。同樣的,1和0也不是,是以,首先測試這些數字。此外,2是質數中唯一的偶數。沒有必要用一個循環來驗證4,6,8。再則,如果一個數字不能被2整除,那麼它不能被4,6,8等整除。是以,你的循環必須跳過這些數字。如果你測試輸入偶數,你的算法将慢2倍(你測試雙倍數字)。可以采取其他一些更明智的優化手段,我這裡采用的是适用于大多數情況的。例如,如果一個數字不能被5整除,它也不會被5的倍數整除。是以,沒有必要檢測10,15,20等等。如果你深入了解這個問題的解決方案,我建議你去看相關的Wikipedia介紹。

3、最後一點,你不需要檢查比輸入數字的開方還要大的數字。我感覺人們會遺漏掉這一點,并且也不會因為此而獲得消極的回報。但是,展示出這一方面的知識會給你額外加分。

//最後貼上代碼

function isPrime(number) {
   // If your browser doesn't support the method Number.isInteger of ECMAScript 6,
   // you can implement your own pretty easily
   if (typeof number !== 'number' || !Number.isInteger(number)) {
      // Alternatively you can throw an error.
      return false;
   }
   if (number < 2) {
      return false;
   }
 
   if (number === 2) {
      return true;
   } else if (number % 2 === 0) {
      return false;
   }
   var squareRoot = Math.sqrt(number);
   for(var i = 3; i <= squareRoot; i += 2) {
      if (number % i === 0) {
         return false;
      }
   }
   return true;
}