国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

204:Count Primers

2019-11-08 18:40:34
字體:
來源:轉載
供稿:網友

target:Count the number of PRime numbers less than a non-negative number n

我第一次編寫的解決代碼,時間復雜度是O(n2),在40多萬時就掛了。

	//O(n2),cost too much time	public int simplecountPrimes(int n) {		int num = 0;		for (int i = 2; i < n; i++) {			boolean flag = isPrimer(i);			if(flag == true){				num++;			}		}		return num;	  }	public boolean isPrimer(int m){		boolean flag = true;		for (int i = 2; i < m; i++) {			int remainder = m%i;			if(remainder==0){				flag = false;				break;			}		}		return flag;	}

這里著重介紹埃拉托斯特尼篩法(Sieve of Eratosthenes):

核心思想:逐個遍歷數字,數字的倍數必然不是素數,直接去除。

p * q = n; 當p大于q之后,內容出現重復,故我們只需要思考p <√n的開方內的數字的遍歷。

同樣的根據上面這行思想,當我們對√n以下數字遍歷時,我們考慮的倍數的起點一定是i * i (此時正在遍歷的數字)

	//Sieve of Eratosthenes, O(nlglgn)	public int countPrimers(int n){		int num = 0;		boolean[] isPrimers = new boolean[n];		for (int i = 0; i < isPrimers.length; i++) {			isPrimers[i] = true;		}		for (int i = 2; i*i < n; i++) {			if(!isPrimers[i]){				continue;			}			for(int j = i*i;j < n ;j += i){				isPrimers[j] = false;			}		}		for (int i = 2; i < n; i++) {			if(isPrimers[i] == true){				num++;			}		}		return num;	}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 客服| 贵定县| 阜宁县| 阳东县| 阳朔县| 长泰县| 扶绥县| 麻栗坡县| 西平县| 阿拉善左旗| 前郭尔| 长宁县| 福清市| 山东省| 扶风县| 平山县| 黑河市| 英超| 延边| 大庆市| 台东县| 淄博市| 苍溪县| 鄂托克前旗| 桑植县| 太白县| 潞西市| 哈巴河县| 普兰县| 龙胜| 工布江达县| 从江县| 罗平县| 肇东市| 贺兰县| 丰都县| 阜城县| 美姑县| 长汀县| 将乐县| 郎溪县|