多種方法實現素數的判斷

2022-01-23 00:43:18 字數 1536 閱讀 8366

素數的定義:

指整數在乙個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數。換句話說,只有兩個正因數(1和自己)的自然數即為素數。

我將給出幾種實現對自然數n進行素數的判斷方法,主要從**的執行效率上考慮這個問題。

首先,根據素數的定義,大家都會想到的乙個方法就是遍歷2~n-1,如果n能被其中的數整除,則n不是素數,否則為素數。

**:

1

//方法1(遍歷)

2int prime_1(intn)3

9return1;

10 }

方法1最多的迴圈次數為:n-2,雖然能夠解決問題,但這不是乙個好方法。如果n值很大,可以採用另一種方法,就是對n開根號,只需遍歷2~根號n。

**:

1

//方法2(對n開根號)

2int root(intn)3

6int prime_2(intn)7

13return1;

14 }

細心的你可能會發現,在for迴圈中,雖然迴圈次數會減少,但是每次迴圈都要呼叫root(int n)函式,我們知道開根號計算在計算機中是非常耗費時間的,如果每次迴圈都要計算一次,程式的效率肯定不會高,由於n的開根號的值在程式執行過程中是不變的,可以用乙個變數將這個值儲存起來,每次迴圈不需要再去計算,只需取變數的值即可。

**:

1

//方法3(只算一次開平方)

2int prime_3(intn)3

10return1;

11 }

我們可以進一步進行考慮,素數肯定不會是偶數(因為所有的偶數都能被2整除,所以所有的偶數都不是素數),並且2、3、5都是素數,比2、3、5都要大的數如果能被2或者3或者5整除,那麼這個數也不是素數。

根據這個思路,我們就有了第4種判斷素數的方法。

**:

1

//方法4(排除被2、3、5整除的數以及偶數)

2int prime_4(intn)3

17return1;

18 }

現在我們的**的執行效率比較高了,相對於第1種方法,迴圈執行的次數降低了不少,但是還有乙個很影響程式執行效率的因素,那就是對n開根號的計算,開根號計算很耗費時間,因此我們需要消除開根號的計算。我們可以將開根號計算轉換成乘法計算,乘法計算就要比開根號計算要快了,具體的實現過程請看以下的**。

**:

1

//方法5(乘法代替開方)

2for(int i=7;i*i<=n;i+=2)3

7return

1;

總結:以上的5中判斷素數的方法是從程式的執行效率出發的,影響乙個程式的執行效率有**的執行行數,以及**每行**消耗的時間長度,

因此減少迴圈次數以及將開根號計算代替為乘法運算等這些優化對執行效率都是有提高作用的。

用篩選法等多種種方法判斷素數並輸出

輸出範圍內的所有素數 例如1 100 假設輸出0 100中所有的素數,將其能夠整除2到99的數都賦值為零,說明這些數不是素數,然後將其他的數輸出 include include include void primer int n for int i 2 i arr 0 arr 1 0 for int...

python中判斷素數的幾種方法

用python統計101 200中素數的個數,並且輸出所有的素數。分析 這是一道典型的迴圈題。首先,我們應該考慮101 200中得每乙個都需要判斷是否為素數 其次,每乙個數在判斷為素數時都需要判斷能不能被1和它本身以外的數整除。所以這道題,我們在編寫程式的時候要用巢狀迴圈。for迴圈編寫程式 方法一...

jquery判斷元素是否隱藏的多種方法

第一種 使用css屬性 複製 如下 var display id css display if display none 第二種 使用jquery內建選擇器 假設我們頁面有這麼個標籤,複製 如下 p 僅僅是測試所用 div 那麼,我們可以用以下語句來判斷id為 test 的標籤是否隱藏 複製 如下 ...