第一種常規方法:
var isprime = function(num);
//查表直接返回的素數
var pmap = ;
return dmap[num] ? false :
pmap[num] ? true :
!(num%5) ? false :
!((num-1)%6) ? true :
!((num+1)%6) ? true: false;
}
第二種方法:
var isprime = function(num)
測試**:
for(var i=0; i<100; i++)
說明:
第一種方式:通過6n±1法求素數演變而來的;但是有乙個侷限性就是對5以內的數的判斷會有瑕疵;所以,在函式上採用了兩個字典dmap與pmap分別用於存放0、1特殊值,與5以內的素質;然後通過計算傳入值是否滿足6n±1原則,來判斷是否是素數;
第二種方式: 通過將引數轉換成,如:1-->1;2-->11;3-->111;4-->1111;5-->11111以此類推;然後採用正則匹配出是否是質數;
1.先把要判斷的數轉成1*
如2-11,4-1111,8-11111111
2.用這些1去和reg匹配
reg:^1?$ 匹配0或乙個1
^(11+)\1+$/ 以11開頭的去匹配剩下的到末尾的多個1
如8-11
111111,滿足11開頭,於是用11取匹配111111,
發現正好匹配3次,所以次數不是質數。
如9-11
1111111,滿足11開頭,於是用11取匹配1111111,
發現11這個模式並沒有在1111111這個串中正好出現n次,於是,我們的正規表示式引擎會嘗試下一種方法,9-11
1111111,先匹配111
,然後把111作為模式去匹配剩下的111111。以此類推,直至嘗試所有可能都無法匹配成功。
執行效率:
第二種方式完全扯淡...........
判斷乙個數是否是質數
乙個數如果可以進行因數分解,那麼分解的兩個數一定是乙個小於等於sqrt n 乙個大於等於sqrt n 因此遍歷到sqrt n 即可。因為如果sqrt n 左側找不到因數,右側也一定找不到因數。中心思想 遍歷n是否能被2到sqrt n 之間的數整除,如果不能則為質數。import math defis...
JS判斷乙個數是否為質數
非正則實現function isprime num 因為2是比較特殊的質數,所以先拿出來 if num 2 else if num 2 0 依次判斷是否能被奇數整除,最大迴圈為數值的開方 let squareroot math.sqrt num 因為2已經驗證過,所以從3開始 且已經排除偶數,所以每...
判斷乙個數是否為質數(素數)
從鍵盤上輸入乙個數,判斷這個是數是否為質數 素數 質數 素數 除了1和它本身不能被其它數整數的數。如果 i,n 都是整數,那麼 i n 0,那麼就稱 i 是 n 的倍數,n 是 i 的約數或者因數,n 整除 i,i 被 n 整除。演算法 判斷乙個數是否質數 素數 只需判斷有沒有乙個數可以整除這個數就...