数学差异?

2024-04-16 21:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习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)))

Tags: 函数truereturnifdefrangemathsqrt
2条回答

您的索赔:

int(n ** .5 + 1)math.ceil(math.sqrt(n))产生相同的值。你知道吗

我不同意:

让我们看看n == 9时的情况

int(n ** 0.5 + 1) == 4
math.ceil(math.sqrt(n)) == 3

编写的代码产生9,49,121。。。素数的任何平方。这是因为range()的上限是独占的,必须加1才能使其包含在内。你知道吗

for i in range(3, math.ceil(math.sqrt(n)) + 1, 2):
#                                        ^^^^

不过,在使用int(n ** .5 + 1)时,您似乎还记得这一点。或者那是因为不同的原因?你知道吗

相关问题 更多 >