You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于素数筛选Lambda表达式中x==i逻辑的疑问

解析素数筛选代码中的x == i逻辑

这段代码是埃拉托斯特尼筛法(埃氏筛)的简化实现,用来找出100以内的素数。你疑惑的x == i,核心作用就是在每次过滤时把当前的i(也就是我们用来筛除倍数的基准数)本身保留下来,具体拆解如下:

  1. 先明确filter的规则:filter会保留lambda表达式返回True的元素,丢弃返回False的元素。Python的布尔判断里,0等价于False,非零数值都等价于True。
  2. 拆分x == i or x % i这个条件:
    • 当x是i的倍数且x≠i时,x%i等于0(布尔值为False),同时x == i也是False,整个条件返回False,这个数会被过滤掉。
    • 当x就是i本身时,x == i是True,不管x%i的结果是什么(其实i%i=0),整个条件返回True,所以i会被留在nums里。
    • 当x不是i的倍数时,x%i得到非零值(布尔值为True),不管x == i是什么,整个条件返回True,这个数会被保留。

举个具体循环的例子:

  • 第一次循环i=2:初始nums是2到99的所有数,过滤后会保留2(x==i为True),以及所有奇数(奇数%2≠0,返回True),筛掉所有大于2的偶数。
  • 第二次循环i=3:此时nums里是2和所有奇数,过滤后会保留3(x==i为True),以及所有不能被3整除的数,筛掉9、15这类3的倍数(6、12等偶数早就被之前的循环筛掉了)。

另外补充:循环里i只到10是因为100的平方根是10——一个合数必然有一个不大于其平方根的因数,所以筛到10就足够把100以内的所有合数过滤干净,剩下的都是素数。

内容的提问来源于stack exchange,提问作者emiliano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:25:17