因此,我是python(以及一般而言)编程的新手,并且正在做一些编码方面的挑战。我遇到了这个“使用筛子法的质数”难题。我已经成功地尝试过,但是我觉得我的逻辑需要改进。
所以我所做的是在python中使用3 while循环,代码按预期工作,为我提供了一组质数,但是我找不到压缩它的方法。
import sys
n = int(sys.argv[1])
ls = []
i = 2
while i <= n:
ls.append(i)
i += 1
i = 0
while i < len(ls):
if i == 0:
pass
else:
ls[i] = ''
i += 2
i = 1
while i < len(ls):
if i == 1:
pass
else:
ls[i] = ''
i += 3
i = 0
while i < len(ls):
if i == 0:
pass
else:
ls[i] = ''
i += 5
i = 0
primes = []
while i < len(ls):
if ls[i] != '':
primes.append(ls[i])
i += 1
for prime in primes:
print(prime,end=', ')
正如nvidia的首席执行官曾经说过的那样,“它确实有效”,但显然不是最佳方式:D
答案 0 :(得分:0)
您的代码认为49是质数,这并不好。为每个素数进行while循环是行不通的。
这是一个简单的版本,可以执行以下操作:
import math
def primesLessThan(N):
seive = [True] * N
seive[0] = seive[1] = False
for i in range(2,int(math.sqrt(N))+1):
if (seive[i]): # i is prime
for j in range(2*i,N,i): # all multiples of i >= 2i
seive[j] = False # j is composite since i is a factor
return [p for p in range(2,N) if seive[p]]
print(primesLessThan(500))