这应该是一个主要的发电机。我尝试运行它,但它不会打印出整数。该计划也将立即结束。我不知道它是否在运行
def prime_gen():
start = 1
while start:
if start % start == 0:
print(start)
start += 1
答案 0 :(得分:3)
首先是什么是素数?一个没有除数但本身的数字。
简单的方法是从2开始加载这些数字并检查该数字是否不能被所有先前的数字分割,如果是,那么你得到一个新数字;您可以使用yield
代替return
def prime_gen():
primes = [2]
yield 2
n = 3
while True:
for p in primes:
if n % p == 0:
n += 1
break
else:
primes.append(n)
yield n
示例:
pg = prime_gen()
next(pg)
2
next(pg)
3
next(pg)
5
next(pg)
7
next(pg)
11
答案 1 :(得分:2)
这里有两个主要问题:
您的算法不计算素数 - 它无限运行(while start
),并在number % number == 0
(又名number
模number
)时打印一个数字总是如此。所以这是一个从1开始打印数字的无限循环。
你永远不会打电话给prime_gen()
,这就是程序什么都不做的原因。
您已经创建了一个函数但没有调用它。
有关计算素数的好方法,请查看Sieve of Eratosthenes (Wikipedia)。
答案 2 :(得分:1)
您可以执行以下操作:
def prime_gen(limit):
current = 2 # 1 is not exactly prime
primes = []
while current <= limit:
isPrime = True
for p in primes:
if current % p == 0:
isPrime = False
break
if isPrime:
primes.append(current)
print current, ", ",
current += 1
return primes