素數判斷 6X法

2021-09-27 09:01:43 字數 1074 閱讀 4973

【知識解析】

質數又稱素數。

乙個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數;否則稱為合數。

0和1既不是質數也不是合數,最小的質數是2。

【定理證明】

定理1:當n≥5時,如果n為素數,那麼n%6=1或n%6=5。即n一定出現在6x(x≥1)的兩側。

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

……   6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1   ……      

觀察得,當n≥5時,不在6x(x≥1)兩側的數為6x+2,6x+3,6x+4,……,即2(3x+1),3(2x+1),2(3x+2)……。

顯然,它們一定不是素數。

所以當n≥5時,素數一定出現在6x(x≥1)的兩側。

這裡要注意的是,不在6x(x≥1)兩側的肯定不是素數,但在6x(x≥1)兩側的並不是一定就是素數。

所以此時需要對6x(x≥1)兩側資料進行判斷。常見方法是採用普通sqrt(n)版判斷素數方法(步長取6)。

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

證明:所謂孿生素數指的是間隔為2的相鄰素數。

∵ 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-1是偶數的可能,與①違背,故n≠3x+1;

如果n=3x+2,則n+1=3(x+1),此式存在n+1是偶數的可能,與①違背,故n≠3x+2;

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

n是6的倍數。

【程式**】

#includeusing namespace std;

bool isprime(int n)

int main() {

int x;

cin>>x;

if(isprime(x))

cout<<"this is a prime."<

【參考文獻】

小公尺6X手機解鎖(bl鎖)

小技巧 買到手機後就用賬號登入,我一直沒有登入 解鎖後的裝置,可以在bootloader模式下刷第三方rom包。解鎖後的裝置會在服務端永久性的標記為 已解鎖 狀態,但是我們仍然允許您再刷入官方miui後鎖定lk 需要使用fastboot oem lock 進行重新鎖定,切記一定要刷入miui非roo...

Elk公升級到6 x個人總結

因為工作的原因,需要把elk從5.6公升級到6.2雖然有滾動公升級的存在,但是還是踩了很多的坑,其中最主要的原因就是對於elk的不了解導致的,所以建議所有在做elk公升級的人,先去熟悉elk。具體流程如下 首先是elastic search這個是公升級中最關鍵的因為只有它是有狀態的,涉及到儲存,操作...

C 素數判斷法

思路 判斷乙個整數n是否為素數,只需用2到n 1之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數。判斷定理 n不能夠被不大於根號n的任何素數整除,則n是乙個素數 用代買表示如下 int is prime trure int i 2 while i sqrt n 當i小於n的平方根時 優化 ...