演算法小練習 判斷乙個數是否是質數

2021-05-27 13:56:02 字數 1173 閱讀 1917

第一種常規方法:

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 整除。演算法 判斷乙個數是否質數 素數 只需判斷有沒有乙個數可以整除這個數就...