你的例子都不是count_primes()
函数实际上计算素数——它们只是打印奇数素数。让我们实现您的工作版本审判庭代码,不使用令人困惑的布尔值和糟糕的算法,而是利用Python的else
条款for
loops:
def collect_odd_primes(number):
primes = []
for candidate in range(3, number, 2):
for divisor in range(3, int(candidate ** 0.5) + 1, 2):
if candidate % divisor == 0:
break
else: # no break
primes.append(candidate)
return primes
print(collect_odd_primes(40))
OUTPUT
> python3 test.py
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]
>
正如@MarkRansom 评论的那样,埃拉托斯特尼筛法是更好的方法。 (+1) 现在,让我们将代码转换为计算奇数素数:
def count_odd_primes(number):
count = 0
for candidate in range(3, number, 2):
for divisor in range(3, int(candidate ** 0.5) + 1, 2):
if candidate % divisor == 0:
break
else: # no break
count += 1
return count
print(count_odd_primes(40))
OUTPUT
> python3 test.py
11
>