目的: 求 1 1 1 n n n的质数和
本文设定: n = 20 n=20 n=20

  1. 求出 ⌊ 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}

  2. 排除数字 1 1 1, 并假设所有数字都是质数Messiel Lahmer 质数筛法

  3. 求出 ⌊ n ⌋ \lfloor\sqrt{n}\rfloor n 以内的所有质数
    ⌊ 20 ⌋ = 4 \lfloor\sqrt{20}\rfloor=4 20 =4以内的质数有数字 2 2 2 3 3 3

  4. 使用第一个质数 2 2 2进行筛法

  5. ⌊ 20 2 ⌋ = 10 \lfloor\frac{20}{2}\rfloor=10 220=10 20 20 20
    Messiel Lahmer 质数筛法得到
    Messiel Lahmer 质数筛法

  6. ⌊ 10 2 ⌋ = 5 \lfloor\frac{10}{2}\rfloor=5 210=5 10 10 10
    Messiel Lahmer 质数筛法得到
    Messiel Lahmer 质数筛法

  7. ⌊ 6 2 ⌋ = 3 \lfloor\frac{6}{2}\rfloor=3 26=3 6 6 6
    Messiel Lahmer 质数筛法得到
    Messiel Lahmer 质数筛法

  8. ⌊ 5 2 ⌋ = 2 \lfloor\frac{5}{2}\rfloor=2 25=2 5 5 5
    Messiel Lahmer 质数筛法

  9. ⌊ 4 2 ⌋ = 2 \lfloor\frac{4}{2}\rfloor=2 24=2 4 4 4
    Messiel Lahmer 质数筛法

  10. ⌊ 3 2 ⌋ = 1 \lfloor\frac{3}{2}\rfloor=1 23=1,此时已经小于质数 2 2 2,不需要进行任何操作了

  11. 使用第二个质数 3 3 3进行筛法,注意:不要使用到比 3 3 3更小的质数 2 2 2

  12. ⌊ 20 3 ⌋ = 6 \lfloor\frac{20}{3}\rfloor=6 320=6 20 20 20
    Messiel Lahmer 质数筛法得到
    Messiel Lahmer 质数筛法

  13. ⌊ 10 3 ⌋ = 3 \lfloor\frac{10}{3}\rfloor=3 310=3 10 10 10
    Messiel Lahmer 质数筛法得到
    Messiel Lahmer 质数筛法

  14. ⌊ 6 3 ⌋ = 2 \lfloor\frac{6}{3}\rfloor=2 36=2,此时已经小于质数 3 3 3,不需要进行任何操作了

  15. 至此,得到了 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中,为什么不要使用到比当前质数更小的所有质数
  • 为什么这个筛法能得到正确的答案,其复杂度是多少
  • 除了能够求出质数的前缀和,还可以使用该算法计算什么
  • 你能写出代码来吗

相关文章:

  • 2021-12-09
  • 2022-12-23
  • 2021-04-07
  • 2021-08-07
  • 2022-12-23
  • 2022-12-23
  • 2021-05-27
猜你喜欢
  • 2022-03-05
  • 2022-12-23
  • 2021-12-13
  • 2022-12-23
  • 2021-08-19
相关资源
相似解决方案