該算法比較高效(肯定有更高效的算法,沒再繼續(xù)優(yōu)化算法),求1億內(nèi)所有素?cái)?shù)也僅為2秒左右,依據(jù)是所有的合數(shù)都可以拆分為:n * m ,而質(zhì)數(shù)只能被1和其本身整除。
/** * 求0-num 所有質(zhì)數(shù) * @author http://www.pzizfji.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); } }