【发布时间】:2020-12-25 12:26:30
【问题描述】:
我正在参加关于 Udemy 的课程,其中一个练习是返回一系列数字中的所有素数(例如 100 之前的所有素数)
这是老师的查询
def count_primes2(num):
#Check for 1 or 0
if num < 2:
return 0
######################
#2 or greater
#Store our prime numbers
primes = [2] #I start my list with 2 that is a prime number
#Counter going up to the input num
x = 3 #I create a variable on which I will continue adding until I reach num
# x is going through every number up to the input num
while x <= num:
#Check if x is prime
for y in range(3,x,2): # for y in range from 3 to x in even steps, we only wantto check odd numbers there
if x%y == 0:
x += 2
break
else:
primes.append(x)
x += 2
print(primes)
return len(primes)
count_primes2(100)
但是,我想出了下面那个不起作用的方法。我的想法是:
给定介于 3 和 num+1 之间的每个数字 i(例如 100 将是 101,因此 100 可以包含在计算中):
- 打开一个 for 循环,在该循环中,我将 i 除以 i 之前的每个数字 g(包括 i),并且当该除法没有余数时,我有一个计数器检查。这意味着在素数的情况下,计数器应始终为 2(例如 3--> 3:1 和 3:3 将给出余数 0)。
- 如果计数器等于 2,则 i 是素数,我想将其附加到列表中。
我没有在查询中使用任何 while 循环。你能帮我找出为什么我的查询不起作用吗?
def count_prime(num):
counter=0
list_prime=[2]
if num<2:
return 0
for i in range(3,num+1):
for g in range(1,i+1):
if i%g==0:
counter+=1
if counter==2:
list_prime.append(i)
return list_prime
count_prime(100)
【问题讨论】:
-
“不工作”——提供更多细节
-
第一个查询正确返回所有素数,而我的查询返回 [2]
-
您需要为您正在检查的每个新
i将counter设置回零。 -
谢谢! def count_prime(num): counter=0 list_prime=[2] if num
标签: python