高效判斷素數方法

2021-06-08 16:06:55 字數 1021 閱讀 4707

2012/8/2 18:07

孿生素數: 所謂孿生素數指的是間隔為 2 的相鄰素數,它們之間的距離已經近得不能再近了。

若n≥6且n-1和n+1為孿生素數,那麼n一定是6的倍數。

證明:∵ n-1和n+1是素數 ┈

┈┈┈┈ 

① ∴ n-1和n+1是奇數

∴ n是偶數,即n是2的倍數 ┈┈┈┈┈ ②

假設n不是3的倍數,得:

n=3x+1 或 n=3x+2,

如果n=3x+1,則n-1=3x,與①違背,故n≠3x+1;

如果n=3x+2,則n+1=3(x+1),與①違背,故n≠3x+2;

∴假設不成立,即n是3的倍數,又有②得結論:

n是6的倍數。

由上面的規律可以推出下面結論:

若x≧1

且n=6x-1

或n=6x

+1不是素數,那麼n一定不是2和3的倍數。

證明:∵n=6x-1或n=6x+1,即n=2(3x)-1或n=2(3x)+1或n=3(2x)-1或n=3(2x)+1。

∴n一定不是2和3的倍數。

素數出現規律:

當n≧5時,如果n為素數,那麼n mod 6 = 1 或 n mod 6 = 5,即n一定出現在6x(x≥1)

兩側。證明:

當x≥1時,有如下表示方法:

┈┈ 6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1┈┈

不在6x兩側的數為

6x+2

,6x+3

,6x+4,即2(3x+1),3(2x+1),2(3x+2),它們一定不是素數,所以素數一定出現在6x的兩側。

高效判斷乙個大於1的數是否為素數:

bool isprime(int num)

if (num % 6 != 1 && num % 6 != 5)

for (int i = 5; i*i <= num; i += 6) }

return true;

}

大素數高效演算法判斷

前段日子我也在做素數,下面是我的乙個總結,看到那個2秒搞定的,我還真想去看看 當數字小於1000000時,可以用簡單的判斷 int isprime int n 但當數值在1000000到100000000時 介紹一種方法 prime 為事先做好的素數表 如果需要判斷的數最大為100000000,則p...

判斷是否為素數的高效方法(Python)

演算法一 針對輸入的數字x,我們可以遍歷從2到x 1這個區間中的數,如果x能被這個區間中任意乙個數整除,那麼它就不是質數。def is prime1 x for i in range 2,x if num i 0 return false return true演算法二 對演算法一的優化,事實上只需...

判斷素數的方法(孿生素數)

素數 質數prime number 定義為在大於1的自然數中,除了1和它本身以外不再有其他因數,素數有無窮多個。先來一張 2 200素數分布表 從2到 n整除判斷 public static boolean isprime int num for int i 2 i sqrt num i retur...