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

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

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

2019-11-10 16:51:56
字體:
來源:轉載
供稿:網友

求出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); }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永春县| 湛江市| 石家庄市| 阿鲁科尔沁旗| 宝应县| 获嘉县| 陕西省| 奇台县| 增城市| 彭水| 陈巴尔虎旗| 五寨县| 南和县| 安溪县| 长宁区| 天台县| 凉城县| 大宁县| 石景山区| 新竹市| 伊宁县| 扶沟县| 青冈县| 海兴县| 陕西省| 陈巴尔虎旗| 西和县| 马关县| 靖宇县| 从化市| 江达县| 梅河口市| 安远县| 胶南市| 湖州市| 鹰潭市| 文山县| 江源县| 广水市| 乐陵市| 金昌市|