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

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

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

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

求出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); }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桓台县| 讷河市| 囊谦县| 甘肃省| 海晏县| 江西省| 廊坊市| 东阿县| 浦县| 宜都市| 驻马店市| 六盘水市| 平遥县| 略阳县| 龙泉市| 樟树市| 屯留县| 西充县| 介休市| 宣城市| 蒙山县| 崇信县| 陕西省| 庄浪县| 景洪市| 搜索| 岢岚县| 金川县| 阿拉善左旗| 龙山县| 高唐县| 辉南县| 定兴县| 瑞丽市| 诏安县| 会东县| 玉溪市| 华蓥市| 文登市| 原阳县| 株洲县|