<p>我正在学习python3,正在做一些codeval的工作,我需要生成一个素数列表。你知道吗</p>
<p>所以我写了一个函数来检查一个数是否是素数,但是我没有得到我想要的答案,所以我在这个网站上找到了一个类似的函数。但是,从技术上讲(除非我没有看到什么),它们应该产生相同的输出。你知道吗</p>
<p>“trouble”区域位于<code>isPrime</code>函数的<code>range</code></p>
<p><code>int(n ** .5 +1)</code>和<code>math.ceil(math.sqrt(n))</code>产生相同的值。你知道吗</p>
<p>所以我的问题是:为什么在这两种求一个数的平方根的方法中,我得到的结果是不同的?你知道吗</p>
<pre><code>def isPrime(n):
if n == 2:
return True
elif n < 2 or n % 2 == 0:
return False
# for i in range(3,int(n ** .5 + 1),2):
for i in range(3,math.ceil(math.sqrt(n)),2):
if n % i == 0: return False
return True
def generatePrimes(n):
primes = [2]
noOfPrimes = 1
idx = 3
while noOfPrimes < n:
if isPrime(idx):
primes.append(idx)
noOfPrimes+=1
idx += 2
return primes
print((generatePrimes(50)))
</code></pre>