在我用Python生成的素数列表中有一个4

在我用Python生成的素数列表中有一个4,python,Python,这是我的密码 #Prime numbers between 0-100 for i in range(2,100): flg=0 for j in range(2,int(i/2)): if i%j==0: flg=1 break if flg!=1: print(i) 输出是 2 3 4 <- 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61

这是我的密码

#Prime numbers between 0-100
for i in range(2,100):
    flg=0
    for j in range(2,int(i/2)):
        if i%j==0:
            flg=1
            break
    if flg!=1:
        print(i)
输出是

2
3
4 <-
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
2
3.

4原因是范围不包括在内,即

>>> range(2,2)
[]
所以当你访问4时,你不会检查除数。例如,更改为
范围(2,int(i/2)+1)

要加快计算速度,可以使用math.sqrt代替/2操作,例如:

import math
然后

for j in range(2, int(math.sqrt(i)+1)):

实际上,在
i/2
之前您不需要检查,
int(math.sqrt(i))+1
就足够了。您不需要标志,只需在
上为
添加一个
else
。如果没有
中断
,它将运行。检查任何偶数也是毫无意义的,因此
范围(3100,2)
将为您节省50%的工作。请记住先从
[2]
打印(2)
开始。@alko:我可以向你保证,2的幂都不是奇数,也不会出现在
range()
@Wooble()生成的奇数列表中。是的,你说得对。我看了其他范围:)