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

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

Eratosthenes篩選法求小于N的所有素數個數

2019-11-09 21:17:36
字體:
來源:轉載
供稿:網友

求出1~N范圍中所有的素數,在leetcode中做過這個題目,我想從對每個1~N進行一次遍歷,每個數判斷一次是否是素數。

判斷一個數是否是素數的復雜度本身也是挺高的,再進行一次迭代,在leetcode中的結果是超時:

class Solution {PRivate: bool isPrime(int n) { int sqrt_=sqrt(n); int i; for (i=2;i<=sqrt_;++i) { if(n%i==0) break; } if(i>sqrt_) return true; else return false; }public: int countPrimes(int n) { int count=0; for(int i=2;i<n;++i) { if(isPrime(i)) ++count; } return count; }};

Eratosthenes篩選法

既然篩選,先假定1~N全是素數,然后從第一個素數2的平方4開始,去掉因子包括2的數,例如4、6、8…. 然后從后一個素數3的平方9開始剔除,因子包括3的數,例如9、12等。。。

最后剩下的數就是所有的素數。

代碼

class Solution {public: int countPrimes(int n) { if(n<2) return 0; vector<bool>primes(n + 1,true); primes[0] = false; primes[1] = false; int p = 2;//第一個素數 int j = p*p; int c = 0; while (j <= n) { while (j <= n) { primes[j] = false; j += p; } ++p; while (!primes[p])//尋找下一個素數 { ++p; } j = p*p;//從p的平方開始篩選 } return std::count(primes.begin(), primes.end()-1,true); }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 渝北区| 察隅县| 阳新县| 秦皇岛市| 丰镇市| 龙口市| 柳河县| 桐城市| 贺州市| 辽中县| 江西省| 汉寿县| 富川| 台中县| 宁蒗| 榆林市| 苍梧县| 磐安县| 汽车| 蕲春县| 和平区| 高阳县| 富顺县| 克什克腾旗| 淮南市| 化隆| 芒康县| 吉安市| 德阳市| 醴陵市| 梁河县| 久治县| 民乐县| 德昌县| 定边县| 双城市| 西平县| 抚顺市| 郓城县| 潜江市| 吉安县|