补全:从 i*i 起筛

补全埃氏筛内层:从 i * i 开始筛倍数。补全后输出 10 以内的素数。 本节模型:is_prime(n) 试除到 √n;sieve(n) 埃氏筛出 2..n 的素数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:小于 2 的边界

补全 is_prime:小于 2 的数都不是素数。补全后判断 1。 本节模型:is_prime(n) 试除到 √n;sieve(n) 埃氏筛出 2..n 的素数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

1e7 个 bool 占多少内存

n = 10^7 时,bool 数组大约要占【0】。

开始练习 →

vector 为什么省内存

第 1 步:8 个「是不是素数」要存 第 2 步:bool 数组:每个占 1 字节 第 3 步:vector<bool>:每个 1 位 第 4 步:8 个数挤进 1 字节的宽度 vector<bool> 比 bool

开始练习 →

外层循环只要走到哪

埃氏筛的外层循环 i 只需要走到【0】。

开始练习 →

1e7 个 bool 是多少 MB

运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; int main() {

开始练习 →

补全:一百万以内的素数个数

补全筛法:数 1..1000000 里有多少个素数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:素数之和要用 long long

补全:求 1..1000000 里所有素数的和。和会超过 int 的上限,累加器要选对类型。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:筛法外层只到根号 n

补全筛法外层的循环条件:i 只要走到 i*i 超过 n。输出 2..10000000 里的素数个数(外层条件写错会慢很多,写对了很快)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

一千万个 long long 多大

运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; int main() {

开始练习 →