C語言判斷乙個數是否為素數方法解析

2022-10-04 04:03:09 字數 896 閱讀 3101

一、概念介紹

素數又稱為質數。乙個大於1的自然數(從2開始),除了1和它本身外,不能被其他自然數整除的叫做素數,否則稱為合數。

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

二、**

方法一:

bool is_prime(int num)

return true;

}注意:在for迴圈判斷時不能忘記 i <= sqrt(num) 的等號,因為假設 p*p = n ,jocigi n的因子是可以取到 sqrt(n) 的,如判斷 9 是不是素數,如果沒有等號會出現 9是素數,而實際上 9不是素數。

方法二:

關於質數分布的規律:大於等於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+2,6x+3,6x+4,由於2(3x+1),3(2x+1),2(3x+2),所以它們一定不是素數,再除去6x本身,顯然,素數要出現只可能出現在6x的相鄰兩側。因此在5到sqrt(n)中每6個數只判斷2個,時間複雜度o(sqrt(n)/3)。

在高配版和尊享版中,都是乙個剪枝的思想,高配版中裁剪了不必要的偶數,尊享版中裁剪了不和6的倍數相鄰的數,雖然都沒有降低時間複雜度的階數,但都一定程度上加快了判斷的速度。

/*一種高效的方法*/

bool isprime_3(int num)

//排除所有,剩餘的是質數

return true;

}三、測試

對負數與0,1進行異常處理

int main()

while(num >= 2 && num != -1)

}}四、截圖

C語言判斷乙個數是否為素數

素數又稱質數。所謂素數是指除了1和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被2 16的任一整數整除。思路1 因此判斷乙個整數m是否是素數,只需把m被 2 m 1 之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數。思路2 另外判斷方法還可以簡化。m不必被 2 m 1 ...

判斷乙個數是否為素數

判斷乙個數n是否是素數,只需要判斷它是否能被2到n之間的數整除就行了,若不能被整除,則說明是素數。考慮到某數大於n 2時,n不可能被該數整除,故只需遍歷2 n 2即可。更進一步,由合數定理可知,若乙個數是合數,則它的最小質因數必小於等於該數的平方根,由此可得更為高效的 如下 include incl...

判斷素數 Python判斷乙個數是否為素數

素數的定義 乙個數如果只能被1和自身整除,則該數為素數。如果用程式設計的思維思考,則是說,如果乙個數被比它小的數 1除外 整除後餘數為0,則說明這個數可以被其他數整除,則該數為合數,否則該數為質數。python 如下 注釋 range 的起始值應該設為2,如果起始值設為1,則會第一次列印說該數是合數...