From 36f59b6fe9ee832a7896e405c8bb76ae62b31e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E5=B7=8D=E8=80=80-LWW?= <694125111@qq.com> Date: Wed, 11 Nov 2020 22:27:58 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E6=89=93=E5=8D=B0=E7=B4=A0=E6=95=B0.m?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了C++版本的代码 --- ...23\345\215\260\347\264\240\346\225\260.md" | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git "a/\351\253\230\351\242\221\351\235\242\350\257\225\347\263\273\345\210\227/\346\211\223\345\215\260\347\264\240\346\225\260.md" "b/\351\253\230\351\242\221\351\235\242\350\257\225\347\263\273\345\210\227/\346\211\223\345\215\260\347\264\240\346\225\260.md" index 2ab9e10..3a58074 100644 --- "a/\351\253\230\351\242\221\351\235\242\350\257\225\347\263\273\345\210\227/\346\211\223\345\215\260\347\264\240\346\225\260.md" +++ "b/\351\253\230\351\242\221\351\235\242\350\257\225\347\263\273\345\210\227/\346\211\223\345\215\260\347\264\240\346\225\260.md" @@ -178,4 +178,41 @@ int countPrimes(int n) {

-======其他语言代码====== \ No newline at end of file +======其他语言代码====== + +C++解法: +采用的算法是埃拉托斯特尼筛法 +埃拉托斯特尼筛法的具体内容就是:**要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。** +同时考虑到大于2的偶数都不是素数,所以可以进一步优化成:**要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的奇数倍剔除,剩下的奇数就是素数。** +此算法其实就是上面的Java解法所采用的。 + +这里提供C++的代码: +```C++ +class Solution { +public: + int countPrimes(int n) { + int res = 0; + bool prime[n+1]; + for(int i = 0; i < n; ++i) + prime[i] = true; + + for(int i = 2; i <= sqrt(n); ++i) //计数过程 + { //外循环优化,因为判断一个数是否为质数只需要整除到sqrt(n),反推亦然 + if(prime[i]) + { + for(int j = i * i; j < n; j += i) //内循环优化,i*i之前的比如i*2,i*3等,在之前的循环中已经验证了 + { + prime[j] = false; + } + } + } + for (int i = 2; i < n; ++i) + if (prime[i]) res++; //最后遍历统计一遍,存入res + + return res; + } +}; +``` + + + -- GitLab