我正在学习python3,正在做一些codeval的工作,我需要生成一个素数列表。你知道吗
所以我写了一个函数来检查一个数是否是素数,但是我没有得到我想要的答案,所以我在这个网站上找到了一个类似的函数。但是,从技术上讲(除非我没有看到什么),它们应该产生相同的输出。你知道吗
“trouble”区域位于isPrime
函数的range
int(n ** .5 +1)
和math.ceil(math.sqrt(n))
产生相同的值。你知道吗
所以我的问题是:为什么在这两种求一个数的平方根的方法中,我得到的结果是不同的?你知道吗
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)))
您的索赔:
int(n ** .5 + 1)
和math.ceil(math.sqrt(n))
产生相同的值。你知道吗我不同意:
让我们看看
n == 9
时的情况编写的代码产生9,49,121。。。素数的任何平方。这是因为
range()
的上限是独占的,必须加1才能使其包含在内。你知道吗不过,在使用
int(n ** .5 + 1)
时,您似乎还记得这一点。或者那是因为不同的原因?你知道吗相关问题 更多 >
编程相关推荐