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

如何使用Python列表推导式生成2至100的所有小于100的倍数(构建非质数集合)

解决方法:用列表推导式生成1-100的非质数列表

首先得说,你当前的代码逻辑完全偏离了预期目标——内层的[x+x for x in range(100) if i + i <= 100]只是在生成一堆偶数,然后用这个非空列表作为判断条件,导致只要i <=50就会被塞进结果里,这和你要遍历每个数的倍数的需求根本不沾边。

接下来咱们用正确的列表推导式实现你的需求。先明确核心:非质数包括数字1和所有合数,而合数是除了1和自身外还有其他因数的数,也就是可以表示为n*k(n>=2,k>=2,且n*k <=99)的数。

生成所有合数的列表推导式

composites = [n * k for n in range(2, 100) for k in range(2, 100 // n + 1)]

这个推导式的逻辑很清晰:

  • 外层循环遍历每个可能的底数n(从2到99)
  • 内层循环遍历倍数系数k(从2开始,直到n*k不超过99,也就是k最大为99//n)
  • 每次计算n*k并加入列表,得到的就是2-99之间的所有合数

得到完整的非质数列表

因为非质数还包含数字1,直接把它加进去就行:

non_primes = [1] + composites

如果一定要严格按照你最初的步骤(把每个数的所有小于100的倍数,包括自身,加入列表),推导式会是这样:

all_multiples = [n * k for n in range(2, 100) for k in range(1, 100 // n + 1)]

但要注意,这个列表里会包含所有质数(比如3会因为n=3,k=1被加入),不过这刚好适配你后续用埃拉托斯特尼筛法的需求——筛法本身就是通过标记倍数来筛选质数,只要是1或者不在这个列表里的数(且>=2)就是质数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:32:32