素數的快速判斷方法

2021-09-30 21:08:20 字數 888 閱讀 1217

大於等於5的素數與6的倍數相鄰

所有自然數可以用集合a =表示,其中n >= 0,顯然,子集b =內的元素都不是素數,所以只有6n+16n+5可能是素數,素數一定可以用6n+16n+5其中的乙個形式表示,即大於等於5的素數與6的倍數相鄰 。

上面說到大於或等於5的素數一定可以用6n+1或者6n+5來表示,在判斷乙個數num是否是素數時,需要判斷num是否有除1和自身之外的因子。這時只需要判斷x是否是num的因子,其中1 < x <= int(sqrt(num)),而x的範圍又可以用集合表示。當num與6的倍數相鄰時,num才可能是素數,因為num(奇數)和(偶數)互素,也就是不可能是num的因子,此時只需判斷x = 6i+1x = 6i+5是否是num的因子即可,如果都不是,則num是素數。

#include

#include

// 引數: num

// 如果是素數,返回1,否則返回0

intisprime

(const

int num)

return1;

}int

main()

return0;

}

快速判斷素數

首先看乙個關於質數分布的規律 大於等於5的質數一定和6的倍數相鄰。例如5和7,11和13,17和19等等 證明 令x 1,將大於等於5的自然數表示如下 6x 1,6x,6x 1,6x 2,6x 3,6x 4,6x 5,6 x 1 6 x 1 1 可以看到,不在6的倍數兩側,即6x兩側的數為6x 2,...

判斷素數的方法

素數的定義 乙個大於1的自然數,除了1和它本身外,不能被其他自然數整除的素數叫素數。單獨判讀輸入的數n是不是1和2,再從2到n 1判斷是否存在能被2整除的數,如果有就是素數,沒有就不是素數。核心 如下 include func int n return1 intmain 其中優化的乙個方法就是對於乙...

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

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