簡體   English   中英

查找第 10,001 個素數的問題:1 分

[英]Problem with finding 10,001th prime number: 1 off

"""7. By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?"""
countprime=0
n=2
def prime(number):
    for factors in range(2, number):
        if number%factors==0:
            return False
            break
    return True

while countprime!=10001:
    if prime(n)==True:
        countprime+=1
    n+=1
print(n)

答案應該是 104743,但由於某種原因,我的蠻力程序得到了 104744,多了 1 個。 有誰知道為什么是一次性的?

while countprime != 10001:
    if prime(n)==True:
        countprime+=1
    n+=1

當你找到一個質數時,你總是會移動到下一個數字。 所以,找到正確答案后,你加 1 得到 104744。嘗試先加 1,然后檢查它是否為素數。

這是一個例子:

n = 1
while countprime != 10001:
    n += 1
    if prime(n):
        countprime += 1

countprime == 10001時,您需要立即中斷循環以保持變量n不變。 一種可能的方式:

while True:
    countprime += prime(n)
    if countprime == 10001:
        break
    n += 1

在您的程序找到第 10001 個素數后,n 的值增加 1,因此您的 output 比預期答案多 1。

如果您使用print(n-1) ,您的程序將按預期運行。

在循環退出之前,您最后一次增加了n一次。 如果在檢查它是否為質數之前增加 n,那么您的 countPrime 計數器和相應的質數將保持同步(但您必須從 1 而不是 2 開始 n):

n = 1
while countprime != 10001:
    n += 1
    if prime(n):
        countprime += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM