大於等於5的素數與6的倍數相鄰
所有自然數可以用集合a =
表示,其中n >= 0
,顯然,子集b =
內的元素都不是素數,所以只有6n+1
和6n+5
可能是素數,素數一定可以用6n+1
和6n+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+1
和x = 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...