File tree Expand file tree Collapse file tree 1 file changed +38
-1
lines changed
Expand file tree Collapse file tree 1 file changed +38
-1
lines changed Original file line number Diff line number Diff line change @@ -178,4 +178,41 @@ int countPrimes(int n) {
178178<img src =" ../pictures/qrcode.jpg " width =200 >
179179</p >
180180
181- ======其他语言代码======
181+ ======其他语言代码======
182+
183+ C++解法:
184+ 采用的算法是埃拉托斯特尼筛法
185+ 埃拉托斯特尼筛法的具体内容就是:** 要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。**
186+ 同时考虑到大于2的偶数都不是素数,所以可以进一步优化成:** 要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的奇数倍剔除,剩下的奇数就是素数。**
187+ 此算法其实就是上面的Java解法所采用的。
188+
189+ 这里提供C++的代码:
190+ ``` C++
191+ class Solution {
192+ public:
193+ int countPrimes(int n) {
194+ int res = 0;
195+ bool prime[ n+1] ;
196+ for(int i = 0; i < n; ++i)
197+ prime[ i] = true;
198+
199+ for(int i = 2; i <= sqrt(n); ++i) //计数过程
200+ { //外循环优化,因为判断一个数是否为质数只需要整除到sqrt(n),反推亦然
201+ if(prime[i])
202+ {
203+ for(int j = i * i; j < n; j += i) //内循环优化,i*i之前的比如i*2,i*3等,在之前的循环中已经验证了
204+ {
205+ prime[j] = false;
206+ }
207+ }
208+ }
209+ for (int i = 2 ; i < n; ++i)
210+ if (prime[i]) res++; // 最后遍历统计一遍,存入res
211+
212+ return res;
213+ }
214+ };
215+ ```
216+
217+
218+
You can’t perform that action at this time.
0 commit comments