該算法比較高效(肯定有更高效的算法,沒再繼續(xù)優(yōu)化算法),求1億內(nèi)所有素?cái)?shù)也僅為2秒左右,依據(jù)是所有的合數(shù)都可以拆分為:n * m ,而質(zhì)數(shù)只能被1和其本身整除。
/**
* 求0-num 所有質(zhì)數(shù)
* @author http://www.dabudai.cn/
* @date 2020-12-19
*/
public class GetPrimeByNum {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int num = 100000000;
byte[] list = new byte[num + 1];
//0與1不是質(zhì)數(shù),排除,置為-1,byte數(shù)組默認(rèn)各元素值為0
list[0] = list[1] = -1;
for (int i = 2; i <= num; i++) {
if (list[i] == 0) {
//任意合數(shù)都有除1和本身能整除其的數(shù)
for (int j = i * 2; j<= num; j += i) {
//是合數(shù)將其值修改成-1
list[j] = -1;
}
}
}
int count = 0;
//計(jì)算質(zhì)數(shù)的數(shù)量,為0的都是質(zhì)數(shù)
for (int i = 1; i < num; i++) {
if (list[i] == 0) count++;
}
System.out.println("耗時(shí):" + (System.currentTimeMillis() - startTime) + "毫秒,個(gè)數(shù):" + count);
}
}
