Messiel Lahmer 质数筛法

目的: 求 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, 并假设所有数字都是质数

  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
    得到
    在这里插入图片描述

  6. ⌊ 10 2 ⌋ = 5 \lfloor\frac{10}{2}\rfloor=5 210=5 10 10 10
    得到

  7. ⌊ 6 2 ⌋ = 3 \lfloor\frac{6}{2}\rfloor=3 26=3 6 6 6
    得到

  8. ⌊ 5 2 ⌋ = 2 \lfloor\frac{5}{2}\rfloor=2 25=2 5 5 5

  9. ⌊ 4 2 ⌋ = 2 \lfloor\frac{4}{2}\rfloor=2 24=2 4 4 4
    在这里插入图片描述

  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
    得到

  13. ⌊ 10 3 ⌋ = 3 \lfloor\frac{10}{3}\rfloor=3 310=3 10 10 10
    得到

  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中,为什么不要使用到比当前质数更小的所有质数
  • 为什么这个筛法能得到正确的答案,其复杂度是多少
  • 除了能够求出质数的前缀和,还可以使用该算法计算什么
  • 你能写出代码来吗
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值