目的: 求
1
1
1到
n
n
n的质数和
本文设定:
n
=
20
n=20
n=20
-
求出 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋的所有取值
⌊ 20 i ⌋ = { 1 , 2 , 3 , 4 , 5 , 6 , 10 , 20 } \lfloor\frac{20}{i}\rfloor=\{1,2,3,4,5,6,10,20\} ⌊i20⌋={1,2,3,4,5,6,10,20} -
排除数字 1 1 1, 并假设所有数字都是质数
-
求出 ⌊ n ⌋ \lfloor\sqrt{n}\rfloor ⌊n⌋以内的所有质数
⌊ 20 ⌋ = 4 \lfloor\sqrt{20}\rfloor=4 ⌊20⌋=4以内的质数有数字 2 2 2和 3 3 3 -
使用第一个质数 2 2 2进行筛法
-
用 ⌊ 20 2 ⌋ = 10 \lfloor\frac{20}{2}\rfloor=10 ⌊220⌋=10筛 20 20 20
得到
-
用 ⌊ 10 2 ⌋ = 5 \lfloor\frac{10}{2}\rfloor=5 ⌊210⌋=5筛 10 10 10
得到
-
用 ⌊ 6 2 ⌋ = 3 \lfloor\frac{6}{2}\rfloor=3 ⌊26⌋=3筛 6 6 6
得到
-
用 ⌊ 5 2 ⌋ = 2 \lfloor\frac{5}{2}\rfloor=2 ⌊25⌋=2筛 5 5 5
-
用 ⌊ 4 2 ⌋ = 2 \lfloor\frac{4}{2}\rfloor=2 ⌊24⌋=2筛 4 4 4
-
⌊ 3 2 ⌋ = 1 \lfloor\frac{3}{2}\rfloor=1 ⌊23⌋=1,此时已经小于质数 2 2 2,不需要进行任何操作了
-
使用第二个质数 3 3 3进行筛法,注意:不要使用到比 3 3 3更小的质数 2 2 2
-
用 ⌊ 20 3 ⌋ = 6 \lfloor\frac{20}{3}\rfloor=6 ⌊320⌋=6筛 20 20 20
得到
-
用 ⌊ 10 3 ⌋ = 3 \lfloor\frac{10}{3}\rfloor=3 ⌊310⌋=3筛 10 10 10
得到
-
⌊ 6 3 ⌋ = 2 \lfloor\frac{6}{3}\rfloor=2 ⌊36⌋=2,此时已经小于质数 3 3 3,不需要进行任何操作了
-
至此,得到了 20 20 20以内的质数和为 77 77 77
思考:
- 步骤1中,为什么选择 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋
- 步骤2中,为什么需要排除数字 1 1 1,包括 ⌊ n n ⌋ = 1 \lfloor\frac{n}{n}\rfloor=1 ⌊nn⌋=1和质数表中的数字 1 1 1
- 步骤3中,为什么仅使用 ⌊ n ⌋ \lfloor\sqrt{n}\rfloor ⌊n⌋以内的所有质数
- 步骤10和14中,为什么小于当前质数就停止循环
- 步骤11中,为什么不要使用到比当前质数更小的所有质数
- 为什么这个筛法能得到正确的答案,其复杂度是多少
- 除了能够求出质数的前缀和,还可以使用该算法计算什么
- 你能写出代码来吗