演算法系列 列印素數 詳解

2021-07-05 03:31:08 字數 1852 閱讀 7337

繼續演算法之旅。關於素數判定這個問題,也是乙個很經典的程式設計題目。

概念:質數(prime number)又稱素數,有無限個。乙個大於1的自然數,除了1和它本身外,不能被其他自然數整除,換句話說就是該數除了1和它本身以外不再有其他的因數,否則稱為合數。

分析:如果要判定乙個數自然數n(n>1)是不是素數,從素數定義出發,首先想到的肯定是採用迴圈,遍歷 2至n-1所有值,逐個與n除,判定是否可以整除,如果存在能夠整除的情況,則n不為素數。

改進方法:脫離單純程式實現的角度,你會發現可以改進的地方在於遍歷的範圍,如果略作思考,你會發現n/2到n-1的值是不用遍歷的,因為最小的試探除數是2,大於n/2的數肯定不能被整除。進一步思考,遍歷的範圍還可以繼續縮小,其實只需將遍歷的上限設定成n的平方根即可。簡單分析,假設 n可以被p整除,結果為q ,即q=n/p,如果p大於n的平方根,q必定小於n的平方根,所以只要測試n的平方根以下的數字即可,這樣可以進一步提高運算效率。

以下是**:

public class prime 

public static boolean isprime(int num)

}

篩數法求素數的基本思想是:把從1開始的、某一範圍內的正整數從小到大順序排列, 1不是素數,首先把它篩掉。剩下的數中選擇最小的數是素數,然後去掉它的倍數。依次類推,直到篩子為空時結束。

具體做法如下:

<1> 先將1挖掉(因為1不是素數)。

<2> 用2去除它後面的各個數,把能被2整除的數挖掉,即把2的倍數挖掉。

<3> 用3去除它後面的各數,把3的倍數挖掉。

<4> 分別用4、5…各數作為除數去除這些數以後的各數。(事實上,可以簡化,如果需要找1~n範圍內素數表,只需進行到除數為n^2(根號n),取其整數即可。例如對1~50,只需進行到將50^2作為除數即可。)

如上演算法可表示為:

<1> 挖去1;

<2> 用剛才被挖去的數的下乙個數p去除p後面各數,把p的倍數挖掉;

<3> 檢查p是否小於n^2的整數部分(如果n=1000, 則檢查p<31?),如果是,則返回(2)繼續執行,否則就結束;

<4> 紙上剩下的數就是素數。

特別說明:為什麼除數的篩選範圍只到問題規模n的平方根即可?因為通過分析可以知道,當除數的範圍大於這個上限(n的平方根取整)時,所有的要篩選的值都和之前篩選過的重複,繼續篩選無效。

**如下:

/**

* 刪選法求素數

* * @param n

*/public static void isprime2(int n)

}} for (int i = 1; i <= n; i++)

} }

任何乙個自然數,總可以表示成為如下的形式之一:

6n,6n+1,6n+2,6n+3,6n+4,6n+5 (n=0,1,2,…)

顯然,當n≥1時,6n,6n+2,6n+3,6n+4都不是素數,只有形如6n+1和6n+5的自然數有可能是素數。所以,除了2和3之外,所有的素數都可以表示成6n±1的形式(n為自然數)。根據上述分析,我們只對形如6 n±1的自然數進行篩選,這樣就可以大大減少篩選的次數,從而進一步提高程式的執行效率和速度。

實現思路:可以和樸素法判定單個自然數是否為素數結合起來,利用迴圈遞增獲取指定範圍具備6 n±1特徵的數字,利用樸素法來判定數字是否為素數,列印出結果。

以下是**

/*

* 6n+1法求素數

*/public static void isprime3(int n) else

} }

演算法系列 bitmap演算法詳解和實現

我們可以將bitmap看成是一種資料結構,所謂的bit map就是用乙個 或幾個 bit位來標記某個元素對應的state value 最基本的情況,使用1bit標示乙個關鍵字的狀態 可標示兩種狀態 但根據需要也可以使用2bit 標示4種狀態 3bit 標示8種狀態 當乙個狀態標示需要的位數達到32b...

java演算法系列

棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...

演算法系列 Move Zeroes

given an array nums,write a function to move all 0 s to the end of it while maintaining the relative order of the non zero elements.for example,given ...