6倍原理就是:
素數只可能出現在6的倍數附近。
原因:6的倍數以外的數是什麼?6的倍數就是6k,6k附近的數,6k-3,6k-2,6k-1,6k,6k+1,6k+2,6k+3,那麼不在6k左右的幾個數是
6k-3,6k-2,6k+2,6k+3,第乙個和最後乙個數是可以整除3,另兩個數是可以整除2的,所以他們肯定不是素數。
所以只有6的倍數附近的兩個數才有可能是質數。
為什麼說可能是質數的,我舉個反例,25,35,49。。。
那具體是什麼時候才有可能是非質數呢?觀察一下 25((6-1)*(6-1)),35((6-1)*(6+1)),49((6+1)*(6+1)),...
為什麼呢?計算一下,(6k±1)(6p±1)=36kp±6p±6k±1,**右邊式子的36kp
±6p±6k是6的倍數,所以他們的乘積一定是6的倍數附近的數。
上**
//完美!就是要這樣追求極限效能!高效判斷素數
private boolean isprime(int num)
//如果不在
6的倍數附近,肯定不是素數
if (num % 6 != 1 && num % 6 != 5)
//對6
倍數附近的數進行判斷
for (int i = 5
; i <= math.sqrt(num); i += 6)
}return true;
}
正常我們是怎麼判斷的?
private boolean效率相差近乎一倍!isprime(int num)
判斷乙個數是否為素數
判斷乙個數n是否是素數,只需要判斷它是否能被2到n之間的數整除就行了,若不能被整除,則說明是素數。考慮到某數大於n 2時,n不可能被該數整除,故只需遍歷2 n 2即可。更進一步,由合數定理可知,若乙個數是合數,則它的最小質因數必小於等於該數的平方根,由此可得更為高效的 如下 include incl...
判斷乙個數是否為質數(素數)
從鍵盤上輸入乙個數,判斷這個是數是否為質數 素數 質數 素數 除了1和它本身不能被其它數整數的數。如果 i,n 都是整數,那麼 i n 0,那麼就稱 i 是 n 的倍數,n 是 i 的約數或者因數,n 整除 i,i 被 n 整除。演算法 判斷乙個數是否質數 素數 只需判斷有沒有乙個數可以整除這個數就...
優化判斷乙個數是否為素數
1.問題描述 description 對任意給定的乙個正整數,判斷其是否為素數,並輸出判斷結果 input 輸入一行包含乙個正整數n,代表要判斷的數。output 如果n是素數,就輸出prime 如果n不是素數,就輸出not prime。sample input 97 sample output p...