gpt4 book ai didi

python - 在python中打印一系列素数

转载 作者:IT老高 更新时间:2023-10-28 20:35:34 26 4
gpt4 key购买 nike

我在打印一系列从 1 到 10 的素数时遇到问题。我无法弄清楚我的代码有什么问题。

这是我写的;它打印所有奇数而不是素数:

for num in range(1, 101):
for i in range(2, num):
if num % i == 0:
break
else:
print(num)
break

最佳答案

您需要检查从 2 到 n-1 的所有数字(实际上是到 sqrt(n),但是可以,让它是 n)。如果 n 可以被任何数字整除,则它不是素数。如果一个数字是素数,打印它。

for num in range(2,101):
prime = True
for i in range(2,num):
if (num%i==0):
prime = False
if prime:
print (num)

你可以写同样的更短更pythonic:

for num in range(2,101):
if all(num%i!=0 for i in range(2,num)):
print (num)

正如我已经说过的,最好不要检查从 2 到 n-1 的除数,而是从 2 到 sqrt(n):

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)

对于像 101 这样的小数字,这无关紧要,但对于 10**8,差异会非常大。

您可以通过将检查的范围增加 2 来进一步改进它,从而只检查奇数。像这样:

import math
print 2
for num in range(3,101,2):
if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
print (num)

已编辑:

As in the first loop odd numbers are selected, in the second loop no need to check with even numbers, so 'i' value can be start with 3 and skipped by 2.

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)

关于python - 在python中打印一系列素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com