在 Python 中打印素数系列
要打印指定范围内的一系列素数,常见的方法是迭代范围并检查每个数字是否是质数。但是,所提供的代码试图实现此目的,但输出一系列奇数而不是素数。让我们检查这个问题并找到最佳解决方案。
提供的代码迭代范围 (1, 101),并针对每个数字检查该数字本身的整除性。这就是错误所在。素数只能被 1 和它本身整除,所以你只需要检查从 2 到数字本身的数字。
更正后的代码应该如下:
<code class="python">for num in range(2, 101): prime = True for i in range(2, num): if (num % i == 0): prime = False if prime: print(num)</code>
这个修改后的代码为每个数字将布尔标志 prime 初始化为 True,并检查数字直至数字本身,确保正确的素数识别。
或者,更简洁和 Python 的方法是:
<code class="python">for num in range(2, 101): if all(num % i != 0 for i in range(2, num)): print(num)</code>
此代码使用 all() 函数中的生成器表达式来确定该数字是否可以被从 2 到其自身(不包括其自身)的任何数字整除。如果不存在这样的因数,则该数字将打印为素数。
为了提高效率,您只能检查不超过该数字的平方根的除数。这是因为如果一个数有较大的因数,它也一定有一个较小的对应因数。下面的代码结合了这种优化:
<code class="python">import math for num in range(2, 101): if all(num % i != 0 for i in range(2, int(math.sqrt(num)) + 1)): print(num)</code>
最后,为了进一步提高效率,您可以跳过检查偶数,因为大于 2 的素数总是奇数。以下代码反映了这种优化:
<code class="python">import math print(2) for num in range(3, 101, 2): if all(num % i != 0 for i in range(3, int(math.sqrt(num)) + 1, 2)): print(num)</code>
以上是如何在Python中正确打印素数系列?的详细内容。更多信息请关注PHP中文网其他相关文章!