C語言深度學習之素數判斷問題

2021-10-02 08:06:13 字數 1115 閱讀 4979

public

static boolean isprime

(int n)

for(

int i =

2; i < n; i++)}

return

true

;}

這裡特殊處理了一下小於等於3的數,因為小於等於3的自然數只有2和3是質數。然後,我們只需要從2開始,一直到小於其自身,依次判斷能否被n整除即可,能夠整除則不是質數,否則是質數。

假如n是合數,必然存在非1的兩個約數p1和p2,其中p1<=sqrt(n),p2>=sqrt(n)。由此我們可以改進上述方法優化迴圈次數。如下:

public

static boolean isprime

(int n)

int sqrt =

(int

)math.

sqrt

(n);

for(

int i =

2; i <= sqrt; i++)}

return

true

;}

我們繼續分析,其實質數還有乙個特點,就是它總是等於 6x-1 或者 6x+1,其中 x 是大於等於1的自然數。如何論證這個結論呢,其實不難。首先 6x 肯定不是質數,因為它能被 6 整除;其次 6x+2 肯定也不是質數,因為它還能被2整除;依次類推,6x+3 肯定能被 3 整除;6x+4 肯定能被 2 整除。那麼,就只有 6x+1 和 6x+5 (即等同於6x-1) 可能是質數了。所以迴圈的步長可以設為 6,然後每次只判斷 6 兩側的數即可。

public

static boolean isprime

(int num)

// 不在6的倍數兩側的一定不是質數

if(num %6!=

1&& num %6!=

5)int sqrt =

(int

) math.

sqrt

(num)

;for

(int i =

5; i <= sqrt; i +=6

)}return

true

;}

C語言 判斷素數

1 判斷所輸入的整數是否為素數 除1以外只能被1和它本身整除的自然數 include 包含標準庫的資訊 intmain void 每個程式都從main函式的起點開始執行 printf 是素數 n return0 2 求100 200之間的全部素數 include 包含標準庫的資訊 include 標...

C語言判斷素數(求素數)

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

C語言練習之判斷是否為素數

題目要求 輸入乙個整數n,判斷他是否為素數 質數 分析 採用的演算法是,讓n除以i,如果n能被2 n 1 之中的任何乙個整數整除,則表示n肯定不是素數,不必再繼續被後面的整數除,因此,可以提前結束迴圈。如下 include stdio.h void main if i 跳出迴圈後判斷是因為1跳出的迴...